package roomturnoverreward import ( "context" "testing" "chatapp3-golang/internal/common" "chatapp3-golang/internal/integration" ) func TestGetHomeReturnsUserRoomTurnoverAndExpectedReward(t *testing.T) { service, _ := newTestService(t) service.repo.Java = stubRoomTurnoverRewardJavaGateway{ userProfile: integration.UserProfile{ ID: integration.Int64Value(9001), Account: "123456789", UserNickname: "Owner", UserAvatar: "https://example.com/avatar.png", }, userRoom: integration.RoomProfile{ ID: integration.Int64Value(101), RoomAccount: "R101", RoomName: "Owner room", RoomCover: "https://example.com/room.png", UserID: integration.Int64Value(9001), SysOrigin: "LIKEI", }, current: integration.RoomContributionActivityCount{ RoomID: integration.Int64Value(101), ContributionValue: integration.AmountValue(7200000), }, } ctx := context.Background() if _, err := service.SaveConfig(ctx, SaveRoomTurnoverRewardConfigRequest{ SysOrigin: "LIKEI", Enabled: true, Timezone: "Asia/Riyadh", LevelConfigs: []RoomTurnoverRewardLevelInput{ {Level: 1, TurnoverThreshold: 1000000, RewardGold: 1000, Enabled: true}, {Level: 2, TurnoverThreshold: 7000000, RewardGold: 350000, Enabled: true}, }, }); err != nil { t.Fatalf("SaveConfig() error = %v", err) } resp, err := service.GetHome(ctx, common.AuthUser{UserID: 9001, SysOrigin: "LIKEI"}) if err != nil { t.Fatalf("GetHome() error = %v", err) } if !resp.HasRoom || resp.RoomID != 101 || resp.UserNickname != "Owner" { t.Fatalf("profile fields = %+v", resp) } if resp.TurnoverAmount != 7200000 || resp.MatchedLevel != 2 || resp.ExpectedRewardGold != 350000 { t.Fatalf("reward fields = %+v", resp) } if len(resp.LevelConfigs) != 2 || resp.HighlightRewardGold != 350000 { t.Fatalf("level/highlight fields = %+v", resp) } } func TestGetHomeReturnsZeroRewardWhenNoRoom(t *testing.T) { service, _ := newTestService(t) service.repo.Java = stubRoomTurnoverRewardJavaGateway{ userProfile: integration.UserProfile{ ID: integration.Int64Value(9001), UserNickname: "Owner", }, } resp, err := service.GetHome(context.Background(), common.AuthUser{UserID: 9001, SysOrigin: "LIKEI"}) if err != nil { t.Fatalf("GetHome() error = %v", err) } if resp.HasRoom || resp.TurnoverAmount != 0 || resp.ExpectedRewardGold != 0 { t.Fatalf("no room response = %+v", resp) } } func TestGetHomeMatchesDefaultLevelsWhenConfigDisabled(t *testing.T) { service, _ := newTestService(t) service.repo.Java = stubRoomTurnoverRewardJavaGateway{ userRoom: integration.RoomProfile{ ID: integration.Int64Value(101), UserID: integration.Int64Value(9001), SysOrigin: "LIKEI", }, current: integration.RoomContributionActivityCount{ RoomID: integration.Int64Value(101), ContributionValue: integration.AmountValue(7200000), }, } resp, err := service.GetHome(context.Background(), common.AuthUser{UserID: 9001, SysOrigin: "LIKEI"}) if err != nil { t.Fatalf("GetHome() error = %v", err) } if resp.Configured || resp.ActivityStatus != roomTurnoverRewardActivityStatusDisabled { t.Fatalf("config fields = %+v", resp) } if resp.MatchedLevel != 4 || resp.ExpectedRewardGold != 250000 || resp.HighlightRewardGold != 250000 { t.Fatalf("reward fields = %+v", resp) } }