223 lines
8.5 KiB
C#
223 lines
8.5 KiB
C#
using AutoTazTest.Infrastructure;
|
|
using AvtoTAZContratcs.ViewModels;
|
|
using AvtoTAZContratcs.BindingModels;
|
|
using AvtoTAZDatabase;
|
|
using AvtoTAZDatabase.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Http.Headers;
|
|
using System.Threading.Tasks;
|
|
using NUnit.Framework;
|
|
|
|
namespace AutoTazTest.WebApiControllersTests;
|
|
|
|
[TestFixture]
|
|
internal class DealerWebApiControllerTest : BaseWebApiControllerTest
|
|
{
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
AvtoTAZDbContext.Dealers.RemoveRange(AvtoTAZDbContext.Dealers);
|
|
AvtoTAZDbContext.SaveChanges();
|
|
}
|
|
|
|
[Test]
|
|
public async Task Try_GetList_WhenHaveRecords_Test()
|
|
{
|
|
// Arrange
|
|
var dealerA = AvtoTAZDbContext.InsertDealerToDatabaseAndReturn("Dealer A");
|
|
var dealerB = AvtoTAZDbContext.InsertDealerToDatabaseAndReturn("Dealer B");
|
|
var loginResponse = await HttpClient.GetAsync("/login/testuser");
|
|
Assert.That(loginResponse.StatusCode, Is.EqualTo(HttpStatusCode.OK), "Failed to get token");
|
|
var token = await loginResponse.Content.ReadAsStringAsync();
|
|
HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
|
|
|
// Act
|
|
var response = await HttpClient.GetAsync("/api/dealer");
|
|
Console.WriteLine($"Response Status: {response.StatusCode}");
|
|
Console.WriteLine($"Response Content: {await response.Content.ReadAsStringAsync()}");
|
|
|
|
// Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK), "Expected OK status");
|
|
var data = await GetModelFromResponseAsync<List<DealerViewModel>>(response);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(data, Is.Not.Null, "Response data should not be null");
|
|
Assert.That(data, Has.Count.EqualTo(2), "Expected 2 dealers in the list");
|
|
AssertElement(data.First(x => x.Id == dealerA.Id), dealerA);
|
|
AssertElement(data.First(x => x.Id == dealerB.Id), dealerB);
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
public async Task Try_GetList_WhenNoRecords_Test()
|
|
{
|
|
// Arrange
|
|
var loginResponse = await HttpClient.GetAsync("/login/testuser");
|
|
Assert.That(loginResponse.StatusCode, Is.EqualTo(HttpStatusCode.OK), "Failed to get token");
|
|
var token = await loginResponse.Content.ReadAsStringAsync();
|
|
HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
|
|
|
// Act
|
|
var response = await HttpClient.GetAsync("/api/dealer");
|
|
|
|
// Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK), "Expected OK status");
|
|
var data = await GetModelFromResponseAsync<List<DealerViewModel>>(response);
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(data, Is.Not.Null, "Response data should not be null");
|
|
Assert.That(data, Is.Empty, "Expected empty list when no records");
|
|
});
|
|
}
|
|
[Test]
|
|
public async Task Try_GetDealerById_WhenRecordDoesNotExist_Test()
|
|
{
|
|
// Arrange
|
|
var loginResponse = await HttpClient.GetAsync("/login/testuser");
|
|
Assert.That(loginResponse.StatusCode, Is.EqualTo(HttpStatusCode.OK), "Failed to get token");
|
|
var token = await loginResponse.Content.ReadAsStringAsync();
|
|
HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
|
|
|
// Act
|
|
var response = await HttpClient.GetAsync($"/api/dealer/{Guid.NewGuid()}");
|
|
Console.WriteLine($"Response Status: {response.StatusCode}");
|
|
Console.WriteLine($"Response Content: {await response.Content.ReadAsStringAsync()}");
|
|
|
|
// Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound), "Expected NotFound for non-existent dealer");
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetElement_ById_WhenHaveRecord_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var dealer = AvtoTAZDbContext.InsertDealerToDatabaseAndReturn();
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/dealer/{dealer.Id}");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
|
AssertElement(await GetModelFromResponseAsync<DealerViewModel>(response), dealer);
|
|
}
|
|
[Test]
|
|
public async Task GetElement_ById_WhenNoRecord_ShouldNotFound_Test()
|
|
{
|
|
//Arrange
|
|
AvtoTAZDbContext.InsertDealerToDatabaseAndReturn();
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/dealer/{Guid.NewGuid()}");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetElement_ByNameDealer_WhenHaveRecord_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var dealer = AvtoTAZDbContext.InsertDealerToDatabaseAndReturn();
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/dealer/{dealer.NameDealer}");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
|
|
AssertElement(await GetModelFromResponseAsync<DealerViewModel>(response), dealer);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetElement_ByFIO_WhenNoRecord_ShouldNotFound_Test()
|
|
{
|
|
//Arrange
|
|
AvtoTAZDbContext.InsertDealerToDatabaseAndReturn();
|
|
//Act
|
|
var response = await HttpClient.GetAsync($"/api/dealer/New%20Fio");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
|
}
|
|
|
|
[Test]
|
|
public async Task Put_WhenSendEmptyData_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.PutAsync($"/api/dealer", MakeContent(string.Empty));
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
[Test]
|
|
public async Task Delete_ShouldSuccess_Test()
|
|
{
|
|
//Arrange
|
|
var buyerId = Guid.NewGuid().ToString();
|
|
AvtoTAZDbContext.InsertDealerToDatabaseAndReturn(buyerId);
|
|
//Act
|
|
var response = await HttpClient.DeleteAsync($"/api/dealer/{buyerId}");
|
|
//Assert
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NoContent));
|
|
Assert.That(AvtoTAZDbContext.GetDealerFromDatabase(buyerId), Is.Null);
|
|
});
|
|
}
|
|
[Test]
|
|
public async Task Put_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.PutAsync($"/api/dealer", MakeContent(new { Data = "test", Position = 10 }));
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
|
|
[Test]
|
|
public async Task Delete_WhenNoFoundRecord_ShouldBadRequest_Test()
|
|
{
|
|
//Arrange
|
|
AvtoTAZDbContext.InsertDealerToDatabaseAndReturn();
|
|
//Act
|
|
var response = await HttpClient.DeleteAsync($"/api/dealer/{Guid.NewGuid()}");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
|
|
}
|
|
|
|
[Test]
|
|
public async Task Delete_WhenSendWrongFormatData_ShouldBadRequest_Test()
|
|
{
|
|
//Act
|
|
var response = await HttpClient.DeleteAsync($"/api/dealer/id");
|
|
//Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
|
|
}
|
|
|
|
|
|
[Test]
|
|
public async Task Try_DeleteDealer_WhenRecordDoesNotExist_Test()
|
|
{
|
|
// Arrange
|
|
var loginResponse = await HttpClient.GetAsync("/login/testuser");
|
|
Assert.That(loginResponse.StatusCode, Is.EqualTo(HttpStatusCode.OK), "Failed to get token");
|
|
var token = await loginResponse.Content.ReadAsStringAsync();
|
|
HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
|
|
|
// Act
|
|
var response = await HttpClient.DeleteAsync($"/api/dealer/{Guid.NewGuid()}");
|
|
Console.WriteLine($"Response Status: {response.StatusCode}");
|
|
Console.WriteLine($"Response Content: {await response.Content.ReadAsStringAsync()}");
|
|
|
|
// Assert
|
|
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound), "Expected NotFound for non-existent dealer");
|
|
}
|
|
|
|
|
|
|
|
private static void AssertElement(DealerViewModel? actual, Dealer expected)
|
|
{
|
|
Assert.That(actual, Is.Not.Null, "Dealer view model should not be null");
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(actual.Id, Is.EqualTo(expected.Id), "ID mismatch");
|
|
Assert.That(actual.NameDealer, Is.EqualTo(expected.NameDealer), "Name mismatch");
|
|
});
|
|
}
|
|
|
|
} |