From f2ee817ba1423b10b382f6b759a19184db8eeacc Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Thu, 7 May 2026 11:53:51 -0400 Subject: refactor --- interior_test.go | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 interior_test.go (limited to 'interior_test.go') diff --git a/interior_test.go b/interior_test.go new file mode 100644 index 0000000..ba3d948 --- /dev/null +++ b/interior_test.go @@ -0,0 +1,122 @@ +package lulu + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestMarshalValidateInteriorReq(t *testing.T) { + t.Parallel() + want := `{ + "source_url": "https://example.com/interior.pdf", + "pod_package_id": "0850X1100.BW.STD.LW.060UW444.MNG" +}` + req := validateInteriorReq{ + "https://example.com/interior.pdf", + PkgId{ + UsLetter, + Mono, + Standard, + LinenWrap, + P60UncoatedWhite, + Matte, + NavyLinen, + GoldFoil}, + } + requireMarshalJsonEq(t, want, req) +} + +func TestMarshalValidateInteriorBasicReq(t *testing.T) { + t.Parallel() + requireMarshalJsonEq(t, + `{"source_url": "https://example.com/interior.pdf"}`, + validateInteriorBasicReq{"https://example.com/interior.pdf"}) +} + +func TestUnmarshalInteriorValidationRecord(t *testing.T) { + t.Parallel() + data := `{ + "id": 1, + "source_url": "https://www.dropbox.com/sh/p3zh22vzsaegiri/AACOUn3LFKsITDzylh13bQpsa/161025/thesis2.pdf?dl=1", + "page_count": 210, + "errors": null, + "status": "VALIDATING", + "valid_pod_package_ids": null +}` + want := InteriorValidationRecord{ + 1, + "https://www.dropbox.com/sh/p3zh22vzsaegiri/AACOUn3LFKsITDzylh13bQpsa/161025/thesis2.pdf?dl=1", + 210, + "", + InteriorStatusValidating, + nil, + } + requireUnmarshalJsonEq(t, want, data) +} + +func TestValidateInterior(t *testing.T) { + c := newClient(t) + mfg := PkgId{ + UsTrade, + Mono, + Standard, + Perfect, + P60UncoatedWhite, + Gloss, + NoLinen, + NoFoil, + } + id, err := c.ValidateInterior(interiorUrl, mfg) + require.NoError(t, err) + require.NotZero(t, id) + // It seems the server doesn't populate most of the response + // fields, but we just need the ID anyway. +} + +func TestValidateInteriorBasic(t *testing.T) { + c := newClient(t) + id, err := c.ValidateInteriorBasic(interiorUrl) + require.NoError(t, err) + require.NotZero(t, id) + // It seems the server doesn't populate most of the response + // fields, but we just need the ID anyway. +} + +func TestGetInteriorValidation(t *testing.T) { + c := newClient(t) + + // Start validation job + id, err := c.ValidateInteriorBasic(interiorUrl) + require.NoError(t, err) + + // Poll until done + timeout := 15 * time.Second + period := time.Second + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + timer := time.NewTimer(period) + for { + select { + case <-timer.C: + rec, err := c.GetInteriorValidation(id) + require.NoError(t, err) + if rec.Status.IsFinal() { + require.Equal(t, InteriorStatusValidated, rec.Status) + + require.Equal(t, id, rec.Id) + require.Equal(t, interiorUrl, rec.SrcUrl) + require.Equal(t, uint(210), rec.NPages) + require.Empty(t, rec.Errors) + require.NotEmpty(t, rec.ValidPkgIds) + return + } + timer.Reset(period) + case <-ctx.Done(): + t.Errorf("status still not finalized after %v", timeout) + return + } + } +} -- cgit v1.2.3