using System; using System.Collections.Generic; using LCU.API.Collections.RepoApi.Models; using LCU.API.Collections.RepoApi.Services; using LCU.Shared.Collections.RepoApiLib.Models; using LCU.Shared.Collections.RepoApiLib.Repositories; using Moq; using Xunit; namespace LCU.API.Collections.RepoApiTests.Services { public class RepoCompanyServiceTest { [Fact] public async void ListAll_Ok() { var mockCompany = getMockCompany(); var repoCompanyService = getRepoCompanyService(); var result = await repoCompanyService.ListAll(); var companyEnumerator = result.GetEnumerator(); companyEnumerator.MoveNext(); var firstCompanyFromService = companyEnumerator.Current; Assert.Equal(mockCompany.ID, firstCompanyFromService.ID); Assert.Equal(mockCompany.Name, firstCompanyFromService.Name); Assert.Equal(mockCompany.Email, firstCompanyFromService.Email); } [Fact] public async void GetOne_Ok() { var mockCompany = getMockCompany(); var repoCompanyService = getRepoCompanyService(); var result = await repoCompanyService.Get(1); Assert.Equal(mockCompany.ID, result.ID); Assert.Equal(mockCompany.Name, result.Name); Assert.Equal(mockCompany.Email, result.Email); } [Fact] public async void Update_Ok() { var mockCompany = getMockCompany(); var repoCompanyService = getRepoCompanyService(); var oldId = mockCompany.ID; mockCompany.ID = 2; mockCompany.Name = "New Name"; mockCompany.Email = "New Email"; var result = await repoCompanyService.Update(mockCompany, new AppUser()); Assert.Equal(mockCompany.Name, result.Name); Assert.Equal(mockCompany.Email, result.Email); Assert.Equal(oldId, result.ID); } [Fact] public async void Update_Date_Disabled_Saves_User() { var mockCompany = getMockCompany(); var repoCompanyService = getRepoCompanyService(); mockCompany.ID = 2; mockCompany.Name = "New Name"; mockCompany.Email = "New Email"; mockCompany.DisabledDate = DateTime.Now; var result = await repoCompanyService.Update(mockCompany, new AppUser() { FirstName = "John", LastName = "Doe" }); Assert.Equal("John Doe", result.DisabledBy); } [Fact] public async void Update_Date_Disabled__NUll_Clears_User() { var mockCompany = getMockCompany(); var repoCompanyService = getRepoCompanyService(); mockCompany.ID = 2; mockCompany.Name = "New Name"; mockCompany.Email = "New Email"; mockCompany.DisabledBy = "Bobby Boy"; var result = await repoCompanyService.Update(mockCompany, new AppUser() { FirstName = "John", LastName = "Doe" }); Assert.Null(result.DisabledBy); } private RepoCompanyService getRepoCompanyService() { var companies = getMockCompanyList(); var mockRepository = new Mock(); var mockUnitOfWork = new Mock(); mockRepository.Setup(repo => repo.ListAsync()).ReturnsAsync(companies); mockRepository.Setup(repo => repo.FindByIdAsync(It.IsAny())).ReturnsAsync(companies[0]); mockRepository.Setup(repo => repo.Update(It.IsAny())); return new RepoCompanyService(mockRepository.Object, mockUnitOfWork.Object); } private IList getMockCompanyList() { return new List { getMockCompany() }; } private RepoCompany getMockCompany() { return new RepoCompany() {ID = 1, Email = "test1@test1.com", Name = "A Inc."}; } } }