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 } } }