Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RSN-14] - Create DB services #62

Merged
merged 6 commits into from
Jun 19, 2024
Merged
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
5 changes: 5 additions & 0 deletions Server/ReasnAPI/ReasnAPI.Tests/ReasnAPI.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,18 @@

<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.4" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="Microsoft.Playwright.MSTest" Version="1.27.1" />
<PackageReference Include="Moq.EntityFrameworkCore" Version="8.0.1.2" />
<PackageReference Include="MSTest.TestAdapter" Version="3.1.1" />
<PackageReference Include="MSTest.TestFramework" Version="3.1.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ReasnAPI\ReasnAPI.csproj" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ReasnAPI\ReasnAPI.csproj" />
</ItemGroup>
Expand Down
294 changes: 294 additions & 0 deletions Server/ReasnAPI/ReasnAPI.Tests/Services/AddressServiceTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,294 @@
using Moq;
using Moq.EntityFrameworkCore;
using ReasnAPI.Exceptions;
using ReasnAPI.Models.Database;
using ReasnAPI.Models.DTOs;
using ReasnAPI.Services;

namespace ReasnAPI.Tests.Services;

[TestClass]
public class AddressServiceTests
{
[TestMethod]
public void GetAddressById_AddressExists_AddressReturned()
{
var mockContext = new Mock<ReasnContext>();

var address = new Address
{
Id = 1,
City = "City",
Country = "Country",
State = "State",
Street = "Street",
ZipCode = "ZipCode"
};

var fakeAddress = new FakeDbSet<Address> { address };

mockContext.Setup(c => c.Addresses).Returns(fakeAddress);

var addressService = new AddressService(mockContext.Object);

var result = addressService.GetAddressById(1);

Assert.IsNotNull(result);
Assert.AreEqual("City", result.City);
Assert.AreEqual("Country", result.Country);
Assert.AreEqual("State", result.State);
Assert.AreEqual("Street", result.Street);
Assert.AreEqual("ZipCode", result.ZipCode);
}

[TestMethod]
public void GetAddressById_AddressDoesNotExist_NullReturned()
{
var mockContext = new Mock<ReasnContext>();
mockContext.Setup(c => c.Addresses).ReturnsDbSet([]);

var addressService = new AddressService(mockContext.Object);

Assert.ThrowsException<NotFoundException>(() => addressService.GetAddressById(1));
}

[TestMethod]
public void GetAllAddresses_AddressesExist_AddressesReturned()
{
var mockContext = new Mock<ReasnContext>();

var address1 = new Address
{
Id = 1,
City = "City",
Country = "Country",
State = "State",
Street = "Street",
ZipCode = "ZipCode"
};

var address2 = new Address
{
Id = 2,
City = "City",
Country = "Country",
State = "State",
Street = "Street",
ZipCode = "ZipCode"
};

mockContext.Setup(c => c.Addresses).ReturnsDbSet([address1, address2]);

var addressService = new AddressService(mockContext.Object);

var result = addressService.GetAllAddresses();

Assert.IsNotNull(result);
Assert.AreEqual(2, result.Count());
}

[TestMethod]
public void GetAllAddresses_NoAddresses_EmptyListReturned()
{
var mockContext = new Mock<ReasnContext>();
mockContext.Setup(c => c.Addresses).ReturnsDbSet([]);

var addressService = new AddressService(mockContext.Object);

var result = addressService.GetAllAddresses();

Assert.IsNotNull(result);
Assert.AreEqual(0, result.Count());
}

[TestMethod]
public void GetAddressesByFilter_AddressesExist_AddressesReturned()
{
var mockContext = new Mock<ReasnContext>();

var address1 = new Address
{
Id = 1,
City = "City",
Country = "Country",
State = "State",
Street = "Street",
ZipCode = "ZipCode"
};

var address2 = new Address
{
Id = 2,
City = "City",
Country = "Country",
State = "State",
Street = "Street",
ZipCode = "ZipCode"
};

mockContext.Setup(c => c.Addresses).ReturnsDbSet([address1, address2]);
var addressService = new AddressService(mockContext.Object);

var result = addressService.GetAddressesByFilter(r => r.Id == 1).ToList();

Assert.IsNotNull(result);
Assert.AreEqual(1, result.Count);
}

[TestMethod]
public void GetAddressesByFilter_NoAddresses_EmptyListReturned()
{
var mockContext = new Mock<ReasnContext>();
mockContext.Setup(c => c.Addresses).ReturnsDbSet([]);

var addressService = new AddressService(mockContext.Object);

var result = addressService.GetAddressesByFilter(r => r.Id == 1);

Assert.IsNotNull(result);
Assert.AreEqual(0, result.Count());
}

[TestMethod]
public void CreateAddress_AddressCreated_AddressReturned()
{
var mockContext = new Mock<ReasnContext>();
mockContext.Setup(c => c.Addresses).ReturnsDbSet([]);

var addressService = new AddressService(mockContext.Object);

var addressDto = new AddressDto
{
City = "City",
Country = "Country",
State = "State",
Street = "Street",
ZipCode = "ZipCode"
};

var result = addressService.CreateAddress(addressDto);

Assert.IsNotNull(result);
Assert.AreEqual("City", result.City);
Assert.AreEqual("Country", result.Country);
Assert.AreEqual("State", result.State);
Assert.AreEqual("Street", result.Street);
Assert.AreEqual("ZipCode", result.ZipCode);
}

[TestMethod]
public void CreateAddress_AddressDtoIsNull_NullReturned()
{
var mockContext = new Mock<ReasnContext>();
mockContext.Setup(c => c.Addresses).ReturnsDbSet([]);

var addressService = new AddressService(mockContext.Object);

Assert.ThrowsException<ArgumentNullException>(() => addressService.CreateAddress(null));
}

[TestMethod]
public void UpdateAddress_AddressUpdated_AddressReturned()
{
var mockContext = new Mock<ReasnContext>();

var address = new Address
{
Id = 1,
City = "City",
Country = "Country",
State = "State",
Street = "Street",
ZipCode = "ZipCode"
};

mockContext.Setup(c => c.Addresses).ReturnsDbSet([address]);

var addressService = new AddressService(mockContext.Object);

var addressDto = new AddressDto
{
City = "City2",
Country = "Country2",
State = "State2",
Street = "Street2",
ZipCode = "ZipCode2"
};

var result = addressService.UpdateAddress(1, addressDto);

Assert.IsNotNull(result);
Assert.AreEqual("City2", result.City);
Assert.AreEqual("Country2", result.Country);
Assert.AreEqual("State2", result.State);
Assert.AreEqual("Street2", result.Street);
Assert.AreEqual("ZipCode2", result.ZipCode);
}

[TestMethod]
public void UpdateAddress_AddressDoesNotExist_NullReturned()
{
var mockContext = new Mock<ReasnContext>();
mockContext.Setup(c => c.Addresses).ReturnsDbSet([]);

var addressService = new AddressService(mockContext.Object);

var addressDto = new AddressDto
{
City = "City2",
Country = "Country2",
State = "State2",
Street = "Street2",
ZipCode = "ZipCode2"
};

Assert.ThrowsException<NotFoundException>(() => addressService.UpdateAddress(1, addressDto));
}

[TestMethod]
public void UpdateAddress_AddressDtoIsNull_NullReturned()
{
var mockContext = new Mock<ReasnContext>();
mockContext.Setup(c => c.Addresses).ReturnsDbSet([]);

var addressService = new AddressService(mockContext.Object);

Assert.ThrowsException<ArgumentNullException>(() => addressService.UpdateAddress(1, null));
}

[TestMethod]
public void DeleteAddress_AdddressExists_AddressDeleted()
{
var mockContext = new Mock<ReasnContext>();

var address = new Address
{
Id = 1,
City = "City",
Country = "Country",
State = "State",
Street = "Street",
ZipCode = "ZipCode"
};

mockContext.Setup(c => c.Addresses).ReturnsDbSet([address]);

var addressService = new AddressService(mockContext.Object);

addressService.DeleteAddress(1);

mockContext.Verify(c => c.SaveChanges(), Times.Once);
}

[TestMethod]
public void DeleteAddress_AddressDoesNotExist_NothingHappens()
{
var mockContext = new Mock<ReasnContext>();
mockContext.Setup(c => c.Addresses).ReturnsDbSet([]);

var addressService = new AddressService(mockContext.Object);

Assert.ThrowsException<NotFoundException>(() => addressService.DeleteAddress(1));
mockContext.Verify(c => c.SaveChanges(), Times.Never);
}
}
Loading