package store_test import ( "context" "errors" "testing" "github.com/netcell-it/deklarix/internal/store" ) func TestAssetCreateAndGetLatest(t *testing.T) { s := openTestStore(t) ctx := context.Background() accID := testAccountID(t, s) sub, err := s.CreateSubmission(ctx, accID, "instagram", "feed", "...") if err != nil { t.Fatalf("CreateSubmission: %v", err) } a, err := s.CreateAsset(ctx, sub.ID, "image", "/var/lib/deklarix/assets/abc.jpg", "deadbeef") if err != nil { t.Fatalf("CreateAsset: %v", err) } if a.SubmissionID != sub.ID || a.Kind != "image" { t.Fatalf("CreateAsset = %+v, unerwartete Werte", a) } got, err := s.GetLatestAssetForSubmission(ctx, sub.ID) if err != nil { t.Fatalf("GetLatestAssetForSubmission: %v", err) } if got.ID != a.ID || got.SHA256 != "deadbeef" { t.Fatalf("GetLatestAssetForSubmission = %+v, want %+v", got, a) } } func TestGetLatestAssetForSubmissionNotFoundWhenNoneUploaded(t *testing.T) { s := openTestStore(t) ctx := context.Background() accID := testAccountID(t, s) sub, err := s.CreateSubmission(ctx, accID, "instagram", "feed", "...") if err != nil { t.Fatalf("CreateSubmission: %v", err) } _, err = s.GetLatestAssetForSubmission(ctx, sub.ID) if !errors.Is(err, store.ErrNotFound) { t.Fatalf("err = %v, want store.ErrNotFound", err) } } func TestGetLatestAssetForSubmissionReturnsNewestWhenMultiple(t *testing.T) { s := openTestStore(t) ctx := context.Background() accID := testAccountID(t, s) sub, err := s.CreateSubmission(ctx, accID, "instagram", "feed", "...") if err != nil { t.Fatalf("CreateSubmission: %v", err) } if _, err := s.CreateAsset(ctx, sub.ID, "image", "/tmp/erstes.jpg", "erstehash"); err != nil { t.Fatalf("CreateAsset (1): %v", err) } second, err := s.CreateAsset(ctx, sub.ID, "image", "/tmp/zweites.jpg", "zweitehash") if err != nil { t.Fatalf("CreateAsset (2): %v", err) } got, err := s.GetLatestAssetForSubmission(ctx, sub.ID) if err != nil { t.Fatalf("GetLatestAssetForSubmission: %v", err) } if got.ID != second.ID { t.Fatalf("expected the newest asset, got %+v", got) } } func TestAssetIsAppendOnly(t *testing.T) { s := openTestStore(t) ctx := context.Background() accID := testAccountID(t, s) sub, err := s.CreateSubmission(ctx, accID, "instagram", "feed", "...") if err != nil { t.Fatalf("CreateSubmission: %v", err) } a, err := s.CreateAsset(ctx, sub.ID, "image", "/tmp/x.jpg", "hash") if err != nil { t.Fatalf("CreateAsset: %v", err) } _, err = s.Pool.Exec(ctx, `UPDATE asset SET sha256 = 'geaendert' WHERE id = $1`, a.ID) if err == nil { t.Fatal("expected UPDATE on asset to be rejected by the append-only trigger") } _, err = s.Pool.Exec(ctx, `DELETE FROM asset WHERE id = $1`, a.ID) if err == nil { t.Fatal("expected DELETE on asset to be rejected by the append-only trigger") } }