package medias import ( "context" "testing" "backend/database/models/qvyun/public/model" "backend/database/models/qvyun/public/table" "backend/fixtures" dbUtil "backend/pkg/db" "backend/providers/storage" . "github.com/go-jet/jet/v2/postgres" "github.com/google/uuid" "github.com/samber/lo" . "github.com/smartystreets/goconvey/convey" ) func TestService_GetUserBoughtMedias(t *testing.T) { Convey("TestService_GetUserBoughtMedias", t, func() { db, err := fixtures.GetDB() So(err, ShouldBeNil) defer db.Close() So(dbUtil.TruncateAllTables(context.TODO(), db, "user_medias"), ShouldBeNil) Convey("insert some data", func() { items := []model.UserMedias{ {UserID: 1, TenantID: 1, MediaID: 1, Price: 10}, {UserID: 1, TenantID: 1, MediaID: 2, Price: 10}, {UserID: 1, TenantID: 1, MediaID: 3, Price: 10}, } tbl := table.UserMedias stmt := tbl.INSERT(tbl.UserID, tbl.TenantID, tbl.MediaID, tbl.Price).MODELS(items) t.Log(stmt.DebugSql()) _, err := stmt.Exec(db) So(err, ShouldBeNil) Convey("get user bought medias", func() { svc := &Service{db: db} So(svc.Prepare(), ShouldBeNil) ids, err := svc.GetUserBoughtMedias(context.TODO(), 1, 1) So(err, ShouldBeNil) for _, id := range ids { So(lo.Contains([]int64{1, 2, 3}, id), ShouldBeTrue) } }) }) }) } func TestService_List(t *testing.T) { Convey("TestService_list", t, func() { db, err := fixtures.GetDB() So(err, ShouldBeNil) defer db.Close() Convey("truncate all tables", func() { So(dbUtil.TruncateAllTables(context.TODO(), db, "medias", "media_resources", "user_medias"), ShouldBeNil) }) Convey("insert user_medias data", func() { items := []model.UserMedias{ {UserID: 1, TenantID: 1, MediaID: 1, Price: 10}, } tbl := table.UserMedias stmt := tbl.INSERT(tbl.UserID, tbl.TenantID, tbl.MediaID, tbl.Price).MODELS(items) _, err := stmt.Exec(db) So(err, ShouldBeNil) }) Convey("insert medias data", func() { items := []model.Medias{ { UUID: uuid.New(), TenantID: 1, Title: "title1", Description: "hello", Price: 100, Publish: true, }, { UUID: uuid.New(), TenantID: 1, Title: "title2", Description: "hello", Price: 100, Publish: true, }, { UUID: uuid.New(), TenantID: 1, Title: "title3", Description: "hello", Price: 100, Publish: false, }, } tbl := table.Medias stmt := tbl.INSERT( tbl.UUID, tbl.TenantID, tbl.Title, tbl.Description, tbl.Price, tbl.Publish, ).MODELS(items) t.Log(stmt.DebugSql()) _, err := stmt.Exec(db) So(err, ShouldBeNil) }) Convey("get list", func() { svc := &Service{db: db} So(svc.Prepare(), ShouldBeNil) items, err := svc.List(context.TODO(), 1, 1, &ListFilter{ Bought: lo.ToPtr(true), }) So(err, ShouldBeNil) t.Logf("items: %+v", items) So(items, ShouldHaveLength, 1) }) }) } func TestService_List1(t *testing.T) { Convey("TestService_list", t, func() { db, err := fixtures.GetDB() So(err, ShouldBeNil) defer db.Close() tbl := table.Medias stmt := tbl. SELECT(tbl.AllColumns). WHERE( tbl.Publish.EQ(Bool(true)).AND( tbl.TenantID.EQ(Int(1)), ), ). WHERE(tbl.ID.EQ(Int(1))). ORDER_BY(tbl.ID.DESC()) t.Log(stmt.DebugSql()) var dest []ListItem err = stmt.QueryContext(context.TODO(), db, &dest) So(err, ShouldBeNil) t.Logf("dest: %+v", dest) }) } func TestService_PublishTenant(t *testing.T) { Convey("TestService_PublishTenant", t, func() { db, err := fixtures.GetDB() So(err, ShouldBeNil) defer db.Close() Convey("truncate all tables", func() { So(dbUtil.TruncateAllTables(context.TODO(), db, "medias"), ShouldBeNil) }) u1, err := uuid.Parse("6c63c4d8-b2cb-4588-8dd3-9a2276918d17") So(err, ShouldBeNil) u2, err := uuid.Parse("8c183427-02b1-4426-ad65-18c6e7735072") So(err, ShouldBeNil) u3, err := uuid.Parse("24aa56a1-a85b-4a03-9a1b-c39a36103ddf") So(err, ShouldBeNil) Convey("insert some data", func() { items := []model.Medias{ {UUID: u1, TenantID: 1, Title: "title1", Description: "hello", Price: 100, Publish: true}, {UUID: u2, TenantID: 1, Title: "title2", Description: "hello", Price: 100, Publish: true}, {UUID: u3, TenantID: 1, Title: "title3", Description: "hello", Price: 100, Publish: true}, } Convey("publish tenant", func() { svc := &Service{ db: db, storageConfig: &storage.Config{ Path: "/projects/mp-qvyun/backend/fixtures/medias", }, } So(svc.Prepare(), ShouldBeNil) err := svc.PublishTenantMedia(context.TODO(), 1, items[0].UUID, items[0].Title, 100) So(err, ShouldBeNil) err = svc.PublishTenantMedia(context.TODO(), 1, items[1].UUID, items[1].Title, 200) So(err, ShouldBeNil) err = svc.PublishTenantMedia(context.TODO(), 1, items[2].UUID, items[2].Title, 300) So(err, ShouldBeNil) }) }) }) }