=== GS1 Diagnostic v4 ===

--- Step 1: GET existing product ---
GTIN: 5905316173910
Status: WIT

--- Step 2: Verbose PUT (minimal + name + subBrandName) ---
REQ: {"data":{"type":"products","id":"5905316173910","attributes":{"brandName":"bibs","subBrandName":"bibs","commonName":"smoczek","name":"bibs smoczek Baby Blue - On size","gpcCode":10000504,"netContent":1,"netContentUnit":"szt","status":"WIT","targetMarket":["PL"],"descriptionLanguage":"PL"}}}
HTTP 400: {"status":400,"title":"Niepoprawny parametr","detail":"Pole zawiera niepoprawną wartość","errors":[]}
VERBOSE:
* Host mojegs1.pl:443 was resolved.
* IPv6: (none)
* IPv4: 9.223.73.230
*   Trying 9.223.73.230:443...
* ALPN: curl offers h2,http/1.1
*  CAfile: /etc/pki/tls/certs/ca-bundle.crt
*  CApath: none
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / [blank] / UNDEF
* ALPN: server accepted h2
* Server certificate:
*  subject: C=PL; ST=wielkopolskie; L=Pozna\U0144; O=Fundacja GS1 Polska; CN=*.mojegs1.pl
*  start date: Oct 24 09:41:36 2025 GMT
*  expire date: Oct 24 09:41:35 2026 GMT
*  subjectAltName: host "mojegs1.pl" matched cert's "mojegs1.pl"
*  issuer: C=PL; O=Asseco Data Systems S.A.; CN=Certum OV TLS G2 R39 CA
*  SSL certificate verify ok.
*   Certificate level 0: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 1: Public key type ? (4096/128 Bits/secBits), signed using sha512WithRSAEncryption
*   Certificate level 2: Public key type ? (4096/128 Bits/secBits), signed using sha512WithRSAEncryption
* Connected to mojegs1.pl (9.223.73.230) port 443
* using HTTP/2
* Server auth using Basic with user 'user_85c27342-bc97-4f42-8890-f6b27d3233c4'
* [HTTP/2] [1] OPENED stream for https://mojegs1.pl/api/v2/products/5905316173910
* [HTTP/2] [1] [:method: PUT]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: mojegs1.pl]
* [HTTP/2] [1] [:path: /api/v2/products/5905316173910]
* [HTTP/2] [1] [authorization: Basic dXNlcl84NWMyNzM0Mi1iYzk3LTRmNDItODg5MC1mNmIyN2QzMjMzYzQ6SzNzYXdHQTNYP0w/ZV5iSiRacXloaWVGRyl3I2M4Zis/Vl56]
* [HTTP/2] [1] [accept: application/json]
* [HTTP/2] [1] [content-type: application/json]
* [HTTP/2] [1] [content-length: 291]
> PUT /api/v2/products/5905316173910 HTTP/2
Host: mojegs1.pl
Authorization: Basic dXNlcl84NWMyNzM0Mi1iYzk3LTRmNDItODg5MC1mNmIyN2QzMjMzYzQ6SzNzYXdHQTNYP0w/ZV5iSiRacXloaWVGRyl3I2M4Zis/Vl56
Accept: application/json
Content-Type: application/json
Content-Length: 291

* upload completely sent off: 291 bytes
< HTTP/2 400
< date: Tue, 24 Feb 2026 20:08:31 GMT
< content-type: application/json; charset=utf-8
< server: nginx
<
* Connection #0 to host mojegs1.pl left intact


--- Step 3: PATCH instead of PUT ---
HTTP 405:

--- Step 4: gpcCode as string ---
REQ: {"data":{"type":"products","id":"5905316173910","attributes":{"brandName":"bibs","subBrandName":"bibs","commonName":"smoczek","name":"bibs smoczek Baby Blue - On size","gpcCode":"10000504","netContent":1,"netContentUnit":"szt","status":"WIT","targetMarket":["PL"],"descriptionLanguage":"PL"}}}
HTTP 400: {"status":400,"title":"Niepoprawny parametr","detail":"Pole zawiera niepoprawną wartość","errors":[]}

--- Step 5: vnd.api+json content type ---
HTTP 400: {"status":400,"title":"Niepoprawny parametr","detail":"Pole zawiera niepoprawną wartość","errors":[]}

--- Step 6: netContent as float 1.0 ---
REQ: {"data":{"type":"products","id":"5905316173910","attributes":{"brandName":"bibs","subBrandName":"bibs","commonName":"smoczek","name":"bibs smoczek Baby Blue - On size","gpcCode":10000504,"netContent":1.0,"netContentUnit":"szt","status":"WIT","targetMarket":["PL"],"descriptionLanguage":"PL"}}}
HTTP 400: {"status":400,"title":"Niepoprawny parametr","detail":"Pole zawiera niepoprawną wartość","errors":[]}

--- Step 7: Empty attributes ---
REQ: {"data":{"type":"products","id":"5905316173910","attributes":{}}}
HTTP 400: {"type":"https://tools.ietf.org/html/rfc9110#section-15.5.1","title":"One or more validation errors occurred.","status":400,"errors":{"Data.Attributes.Status":["The Status field is required."],"Data.Attributes.TargetMarket":["The TargetMarket field is required."]},"traceId":"00-7f7d0419a26ec9bd0d2f56422ca3b837-5e5d8704f5b4d14e-01"}

--- Step 8: Single field tests ---
  brandName => HTTP 400
  commonName => HTTP 400
  gpcCode => HTTP 400
  netContent => HTTP 400
  netContentUnit => HTTP 400
  status => HTTP 400
  targetMarket => HTTP 400
  descriptionLanguage => HTTP 400

=== DONE ===
