Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 118 additions & 0 deletions Tests/Api/ApiArmyTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
using Tests;
using Xunit;
using Wg_backend_api.Services;
using Moq;
using System.Net;
using XAssert = Xunit.Assert;
using Wg_backend_api.DTO;
using Newtonsoft.Json;
using System.Text;

namespace Tests.Api;

[Collection("Database collection")]
public class ApiArmyTests
{
private readonly HttpClient _client;

public ApiArmyTests(DatabaseFixture db)
{
var mockSession = new Mock<ISessionDataService>();
mockSession.Setup(s => s.GetNation()).Returns("1");
mockSession.Setup(s => s.GetSchema()).Returns("game_1");
mockSession.Setup(s => s.GetRole()).Returns("Player");

var _factory = new TestingWebAppFactory(db.ConnectionString, schema: "game_1", nation: "1", mockSession);
_client = _factory.CreateClient();
}

[Fact]
public async Task GetArmies()
{
var response = await _client.GetAsync("/api/armies");

response.EnsureSuccessStatusCode();
XAssert.Equal(HttpStatusCode.OK, response.StatusCode);

var json = await response.Content.ReadAsStringAsync();
XAssert.NotEmpty(json);
}

[Fact]
public async Task GetArmies_ValidId()
{
var response = await _client.GetAsync("/api/armies/1");

XAssert.Equal(HttpStatusCode.OK, response.StatusCode);
}

[Fact]
public async Task GetArmy_InvalidId()
{
var response = await _client.GetAsync("/api/armies/99999");

XAssert.Equal(HttpStatusCode.NotFound, response.StatusCode);
}

[Fact]
public async Task PostArmy_ValidData()
{
var dto = new CreateArmyDTO
{
Name = "303rd Squadron",
LocationId = 1,
NationId = null,
IsNaval = false
};

var json = JsonConvert.SerializeObject(dto);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await _client.PostAsync("/api/armies", content);

response.EnsureSuccessStatusCode();

XAssert.Equal(HttpStatusCode.Created, response.StatusCode);

var responseBody = await response.Content.ReadAsStringAsync();
XAssert.Contains("303rd Squadron", responseBody);
}

[Fact]
public async Task PostArmy_InvalidLocationData()
{
var dto = new CreateArmyDTO
{
Name = "303rd Squadron",
LocationId = null,
NationId = null,
IsNaval = false
};

var json = JsonConvert.SerializeObject(dto);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await _client.PostAsync("/api/armies", content);

XAssert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
}

[Fact]
public async Task PostArmy_InvalidDataName()
{
var dto = new CreateArmyDTO
{
Name = "303rd Squadron",
LocationId = 1,
NationId = null,
IsNaval = false
};

var json = JsonConvert.SerializeObject(dto);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await _client.PostAsync("/api/armies", content);

XAssert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
}
}
122 changes: 122 additions & 0 deletions Tests/Api/ApiNationsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
using Xunit;
using System.Net;
using Moq;
using Wg_backend_api.Services;
using XAssert = Xunit.Assert;

namespace Tests.Api;

[Collection("Database collection")]
public class ApiNationsTests
{
private readonly HttpClient _client;

public ApiNationsTests(DatabaseFixture db)
{
var mockSession = new Mock<ISessionDataService>();
mockSession.Setup(s => s.GetNation()).Returns("1");
mockSession.Setup(s => s.GetSchema()).Returns("game_1");
mockSession.Setup(s => s.GetRole()).Returns("Player");

var _factory = new TestingWebAppFactory(db.ConnectionString, schema: "game_1", nation: "1", mockSession);
_client = _factory.CreateClient();
}

[Fact]
public async Task GetNation()
{
var response = await _client.GetAsync("/api/nations");

response.EnsureSuccessStatusCode();
XAssert.Equal(HttpStatusCode.OK, response.StatusCode);

var json = await response.Content.ReadAsStringAsync();
XAssert.NotEmpty(json);
}

[Fact]
public async Task GetNation_ValidId()
{
var response = await _client.GetAsync("/api/nations/1");

XAssert.Equal(HttpStatusCode.OK, response.StatusCode);
}

[Fact]
public async Task GetNation_InvalidId()
{
var response = await _client.GetAsync("/api/nations/99999");

XAssert.Equal(HttpStatusCode.NotFound, response.StatusCode);
}

[Fact]
public async Task GetNation_ValidNationStructure()
{
var response = await _client.GetAsync("/api/nations");
response.EnsureSuccessStatusCode();

var json = await response.Content.ReadAsStringAsync();

XAssert.Contains("id", json.ToLower());
XAssert.Contains("name", json.ToLower());
}

[Fact]
public async Task GetNation_ValidNationData()
{
var response = await _client.GetAsync("/api/nations/1");
response.EnsureSuccessStatusCode();

var json = await response.Content.ReadAsStringAsync();

XAssert.NotEmpty(json);
XAssert.Contains("id", json.ToLower());
}

[Fact]
public async Task PostNation_ValidData()
{
var content = new MultipartFormDataContent
{
{ new StringContent("Isengard"), "Name" },
{ new StringContent("1"), "ReligionId" },
{ new StringContent("1"), "CultureId" },
{ new StringContent(""), "Flag" },
{ new StringContent("#FF0000"), "Color" },
};

var response = await _client.PostAsync("/api/Nations", content);

response.EnsureSuccessStatusCode();

XAssert.Equal(HttpStatusCode.Created, response.StatusCode);

var responseBody = await response.Content.ReadAsStringAsync();
XAssert.Contains("Isengard", responseBody);

var nationResponse = await _client.GetAsync("/api/Nations");
response.EnsureSuccessStatusCode();

var nationsJson = await response.Content.ReadAsStringAsync();

XAssert.Contains("Isengard", nationsJson);
}

[Fact]
public async Task PostNation_InvalidData()
{
var content = new MultipartFormDataContent
{
{ new StringContent("Isengard"), "Name" },
{ new StringContent(""), "ReligionId" },
{ new StringContent(""), "CultureId" },
{ new StringContent(""), "Flag" },
{ new StringContent("#FF0000"), "Color" },
};

var response = await _client.PostAsync("/api/Nations", content);

XAssert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
}
}
103 changes: 103 additions & 0 deletions Tests/Api/ApiPopulationsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
using Tests;
using Xunit;
using Wg_backend_api.Services;
using Moq;
using System.Net;
using XAssert = Xunit.Assert;
using Newtonsoft.Json;
using System.Text;
using Wg_backend_api.DTO;

namespace Tests.Api;

[Collection("Database collection")]
public class ApiControllersTests
{
private readonly HttpClient _client;

public ApiControllersTests(DatabaseFixture db)
{
var mockSession = new Mock<ISessionDataService>();
mockSession.Setup(s => s.GetNation()).Returns("1");
mockSession.Setup(s => s.GetSchema()).Returns("game_1");
mockSession.Setup(s => s.GetRole()).Returns("Player");

var _factory = new TestingWebAppFactory(db.ConnectionString, schema: "game_1", nation: "1", mockSession);
_client = _factory.CreateClient();
}

[Fact]
public async Task GetPopulations_OkList()
{
var response = await _client.GetAsync("/api/populations");

response.EnsureSuccessStatusCode();
XAssert.Equal(HttpStatusCode.OK, response.StatusCode);

var json = await response.Content.ReadAsStringAsync();
XAssert.NotEmpty(json);
}

[Fact]
public async Task GetPopulation_ValidId()
{
var response = await _client.GetAsync("/api/populations/1");

XAssert.Equal(HttpStatusCode.OK, response.StatusCode);
}

[Fact]
public async Task GetPopulation_InvalidId()
{
var response = await _client.GetAsync("/api/populations/2137");

XAssert.Equal(HttpStatusCode.NotFound, response.StatusCode);
}

[Fact]
public async Task PostPopulation_ValidData()
{
var dto = new List<PopulationDTO>()
{ new PopulationDTO{
ReligionId = 1,
CultureId = 1,
SocialGroupId = 1,
LocationId = 1,
Happiness = 75.5f,
Volonteers = 1000
}
};

var json = JsonConvert.SerializeObject(dto);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await _client.PostAsync("/api/populations", content);

response.EnsureSuccessStatusCode();

XAssert.Equal(HttpStatusCode.Created, response.StatusCode);
}

[Fact]
public async Task PostPopulation_InvalidData()
{
var dto = new List<PopulationDTO>()
{ new PopulationDTO {
ReligionId = 1,
CultureId = 1,
SocialGroupId = 2137,
LocationId = 1,
Happiness = 69f,
Volonteers = 2137
}
};

var json = JsonConvert.SerializeObject(dto);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await _client.PostAsync("/api/populations", content);

XAssert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
}
}

Loading