aboutsummaryrefslogtreecommitdiffstats
path: root/interior_test.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2026-05-07 11:53:51 -0400
committerSam Anthony <sam@samanthony.xyz>2026-05-07 11:53:51 -0400
commitf2ee817ba1423b10b382f6b759a19184db8eeacc (patch)
tree57d7660024b9b21d2a9ac80c351b2911b5c573e7 /interior_test.go
parent09c91d21b083abc976a4cc6439899fb00438a630 (diff)
downloadlulu-f2ee817ba1423b10b382f6b759a19184db8eeacc.zip
refactor
Diffstat (limited to 'interior_test.go')
-rw-r--r--interior_test.go122
1 files changed, 122 insertions, 0 deletions
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
+ }
+ }
+}