package database import ( "context" "fmt" "reflect" "testing" "git.anthrove.art/Anthrove/otter-space-sdk/v5/pkg/models" "git.anthrove.art/Anthrove/otter-space-sdk/v5/test" "go.opentelemetry.io/contrib/bridges/otellogrus" "go.opentelemetry.io/otel" ) func TestCreatePoolPost(t *testing.T) { // Setup trow away container ctx := context.Background() container, gormDB, err := test.StartPostgresContainer(ctx) if err != nil { logger.Fatalf("Could not start PostgreSQL container: %v", err) } client = gormDB // Setup open telemetry tracer = otel.Tracer(tracingName) hook := otellogrus.NewHook(tracingName) logger.AddHook(hook) defer container.Terminate(ctx) // -- -- Setup Tests // -- Create Pool to test with pool := models.Pool{ BaseModel: models.BaseModel[models.PoolID]{ ID: models.PoolID(fmt.Sprintf("%025s", "Pool1")), }, Name: "Test Pool 01", Category: models.Collection, } pool, err = CreatePool(ctx, pool) if err != nil { logger.Error(err) } // -- Create Post to test with post := models.Post{ BaseModel: models.BaseModel[models.PostID]{ ID: models.PostID(fmt.Sprintf("%025s", "Post1")), }, Rating: models.SFW, } post, err = CreatePost(ctx, post) if err != nil { logger.Error(err) } // -- Create PoolPost to test with validPoolPost := models.PoolPost{ PoolID: pool.ID, PostID: post.ID, OrderPosition: 0, } // -- // -- -- Tests type args struct { ctx context.Context poolID models.PoolID postID models.PostID orderPosition int } tests := []struct { name string args args want models.PoolPost wantErr bool }{ { name: "Test 01: Valid post & pool ID", args: args{ ctx: ctx, postID: post.ID, poolID: pool.ID, orderPosition: 0, }, want: validPoolPost, wantErr: false, }, { name: "Test 02: Duplicate", args: args{ ctx: ctx, postID: post.ID, poolID: pool.ID, orderPosition: 0, }, want: models.PoolPost{}, wantErr: true, }, { name: "Test 03: poolID is empty", args: args{ ctx: ctx, postID: post.ID, poolID: "", orderPosition: 0, }, want: models.PoolPost{}, wantErr: true, }, { name: "Test 04: postID name is empty", args: args{ ctx: ctx, postID: "", poolID: pool.ID, orderPosition: 0, }, want: models.PoolPost{}, wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := CreatePoolPost(tt.args.ctx, tt.args.poolID, tt.args.postID, tt.args.orderPosition) if (err != nil) != tt.wantErr { t.Errorf("CreatePoolPost() error = %v, wantErr %v", err, tt.wantErr) return } if !reflect.DeepEqual(got, tt.want) { t.Errorf("CreatePoolPost() got = %v, want %v", got, tt.want) } }) } } func TestDeletePoolPost(t *testing.T) { // Setup trow away container ctx := context.Background() container, gormDB, err := test.StartPostgresContainer(ctx) if err != nil { logger.Fatalf("Could not start PostgreSQL container: %v", err) } client = gormDB // Setup open telemetry tracer = otel.Tracer(tracingName) hook := otellogrus.NewHook(tracingName) logger.AddHook(hook) defer container.Terminate(ctx) // -- -- Setup Tests // -- Create Pool to test with pool := models.Pool{ BaseModel: models.BaseModel[models.PoolID]{ ID: models.PoolID(fmt.Sprintf("%025s", "Pool1")), }, Name: "Test Pool 01", Category: models.Collection, } pool, err = CreatePool(ctx, pool) if err != nil { logger.Fatal(err) } // -- Create Post to test with post := models.Post{ BaseModel: models.BaseModel[models.PostID]{ ID: models.PostID(fmt.Sprintf("%025s", "Post1")), }, Rating: models.SFW, } post, err = CreatePost(ctx, post) if err != nil { logger.Fatal(err) } // -- Create PoolPost to test with validPoolPost := models.PoolPost{ PoolID: pool.ID, PostID: post.ID, OrderPosition: 0, } validPoolPost, err = CreatePoolPost(ctx, validPoolPost.PoolID, validPoolPost.PostID, validPoolPost.OrderPosition) if err != nil { logger.Fatal(err) } // -- // -- -- Tests type args struct { ctx context.Context poolID models.PoolID postID models.PostID } tests := []struct { name string args args wantErr bool }{ { name: "Test 01: Valid Post & pool id", args: args{ ctx: ctx, poolID: validPoolPost.PoolID, postID: validPoolPost.PostID, }, wantErr: false, }, { name: "Test 02: Not existing postID", args: args{ ctx: ctx, poolID: validPoolPost.PoolID, postID: "", }, wantErr: true, }, { name: "Test 03: Not existing poolID", args: args{ ctx: ctx, poolID: "", postID: validPoolPost.PostID, }, wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if err := DeletePoolPost(tt.args.ctx, tt.args.poolID, tt.args.postID); (err != nil) != tt.wantErr { t.Errorf("DeletePoolPost() error = %v, wantErr %v", err, tt.wantErr) } }) } }