1+ using Xunit ;
2+ using System . Net ;
3+ using backend . db . Models . Player ;
4+ using backend . db . Models . TransferHistoryResponse ;
5+
6+ namespace Backend . Tests . Integration
7+ {
8+ public class FootballPlayerServiceIntegrationTests
9+ {
10+ [ Fact ]
11+ public async Task GetPlayerStats_ValidPlayerId_ReturnsPlayerData ( )
12+ {
13+ // Arrange
14+ string mockApiResponse = @"[{
15+ ""id"": 123,
16+ ""name"": ""Test Player"",
17+ ""profile"": {
18+ ""birthDate"": ""1995-01-15"",
19+ ""height"": ""180cm"",
20+ ""citizenship"": ""England"",
21+ ""position"": { ""main"": ""Forward"" },
22+ ""club"": { ""current"": ""Test FC"" }
23+ },
24+ ""marketValue"": [{
25+ ""value"": 50000000,
26+ ""currency"": ""€""
27+ }],
28+ ""transfers"": []
29+ }]" ;
30+
31+ var service = IntegrationTestHelper . CreateFootballPlayerService ( mockApiResponse ) ;
32+
33+ // Act
34+ PlayerModel result = await service . GetPlayerStats ( 123 ) ;
35+
36+ // Assert
37+ Assert . NotNull ( result ) ;
38+ Assert . Equal ( "Test Player" , result . Name ) ;
39+ Assert . Equal ( 30 , result . Age ) ; // Age calculated from 1995-01-15 (born Jan 15, 1995, now Nov 14, 2025 = 30 years old)
40+ Assert . Equal ( "€50.0M" , result . MarketValue ) ;
41+ }
42+
43+ [ Fact ]
44+ public async Task GetPlayerStats_ApiError_ThrowsException ( )
45+ {
46+ // Arrange
47+ var service = IntegrationTestHelper . CreateFootballPlayerService ( "" , HttpStatusCode . InternalServerError ) ;
48+
49+ // Act & Assert
50+ await Assert . ThrowsAsync < Exception > ( ( ) => service . GetPlayerStats ( 123 ) ) ;
51+ }
52+ [ Fact ]
53+ public async Task GetPlayerWithClubLogo ( )
54+ {
55+ // Arrange
56+ string mockApiResponse = @"[{
57+ ""id"": 123,
58+ ""name"": ""Test Player"",
59+ ""profile"": {
60+ ""birthDate"": ""1995-01-15"",
61+ ""height"": ""180cm"",
62+ ""citizenship"": ""England"",
63+ ""position"": { ""main"": ""Forward"" },
64+ ""club"": { ""current"": ""Test FC"" }
65+ },
66+ ""marketValue"": [{
67+ ""value"": 50000000,
68+ ""currency"": ""€""
69+ }],
70+ ""transfers"": []
71+ }]" ;
72+ var service = IntegrationTestHelper . CreateFootballPlayerService ( mockApiResponse ) ;
73+ // Act
74+ PlayerModel result = await service . GetPlayerWithClubLogo ( 123 ) ;
75+ // Assert
76+ Assert . NotNull ( result ) ;
77+ Assert . Equal ( "Test Player" , result . Name ) ;
78+ Assert . Equal ( "Test FC" , result . Club . clubName ) ;
79+ Assert . Equal ( "Test FC" , result . Club . clubName ) ;
80+ }
81+ [ Fact ]
82+ public async Task GetPlayerWithStatistics ( )
83+ {
84+ // Arrange
85+ string mockApiResponse = @"[{
86+ ""id"": 123,
87+ ""name"": ""Test Player"",
88+ ""profile"": {
89+ ""birthDate"": ""1995-01-15"",
90+ ""height"": ""180cm"",
91+ ""citizenship"": ""England"",
92+ ""position"": { ""main"": ""Forward"" },
93+ ""club"": { ""current"": ""Test FC"" }
94+ },
95+ ""marketValue"": [{
96+ ""value"": 50000000,
97+ ""currency"": ""€""
98+ }],
99+ ""transfers"": []
100+ }]" ;
101+ var service = IntegrationTestHelper . CreateFootballPlayerService ( mockApiResponse ) ;
102+ // Act
103+ PlayerModel result = await service . GetPlayerStatistics ( 123 ) ;
104+ // Assert
105+ Assert . NotNull ( result ) ;
106+ Assert . Equal ( "Test Player" , result . Name ) ;
107+ Assert . Equal ( "England" , result . Nationality ) ;
108+ Assert . Equal ( "Forward" , result . Position ) ;
109+ Assert . Equal ( "180cm" , result . Height ) ;
110+ Assert . Equal ( 30 , result . Age ) ;
111+ Assert . Equal ( "Test FC" , result . Club . clubName ) ;
112+ Assert . Equal ( "€50.0M" , result . MarketValue ) ;
113+ Assert . Equal ( "Test FC" , result . Club . clubName ) ;
114+ }
115+ [ Fact ]
116+ public async Task GetPlayerTransferHistory ( )
117+ {
118+ // Arrange
119+ string mockApiResponse = @"[{
120+ ""id"": 123,
121+ ""name"": ""Test Player"",
122+ ""profile"": {
123+ ""birthDate"": ""1995-01-15"",
124+ ""height"": ""180cm"",
125+ ""citizenship"": ""England"",
126+ ""position"": { ""main"": ""Forward"" },
127+ ""club"": { ""current"": ""Test FC"" }
128+ },
129+ ""marketValue"": [{
130+ ""value"": 50000000,
131+ ""currency"": ""€""
132+ }],
133+ ""transfers"": [
134+ {
135+ ""to"": ""Club A"",
136+ ""from"": ""Club X"",
137+ ""fee"": ""10M"",
138+ ""type"": ""Transfer"",
139+ ""season"": ""2023"",
140+ ""marketValue"": ""10000000"",
141+ ""transferDate"": ""2023-01-15""
142+ },
143+ {
144+ ""to"": ""Club B"",
145+ ""from"": ""Club A"",
146+ ""fee"": ""15M"",
147+ ""type"": ""Transfer"",
148+ ""season"": ""2024"",
149+ ""marketValue"": ""15000000"",
150+ ""transferDate"": ""2024-06-01""
151+ }
152+ ]
153+ }]" ;
154+ var service = IntegrationTestHelper . CreateFootballPlayerService ( mockApiResponse ) ;
155+ // Act
156+ TransferHistoryResponseModel result = await service . GetPlayerTransferHistory ( 123 ) ;
157+ // Assert
158+ Assert . NotNull ( result ) ;
159+ Assert . Equal ( 2 , result . Transfers . Count ) ;
160+ Assert . Equal ( "Club A" , result . Transfers [ 0 ] . ToClub . Name ) ;
161+ Assert . Equal ( "Club B" , result . Transfers [ 1 ] . ToClub . Name ) ;
162+ }
163+ }
164+ }
0 commit comments