ScientificReport
DepartmentServiceTests.cs
Go to the documentation of this file.
1 using System.Collections.Generic;
2 using System.Linq;
3 using Microsoft.EntityFrameworkCore;
4 using Moq;
10 using Xunit;
11 
12 namespace ScientificReport.Test.ServicesTests
13 {
15  {
16  private readonly Mock<DbSet<Department>> _mockDbSetDepartments = MockProvider.GetMockSet(GetTestDepartments().AsQueryable());
17  private readonly Mock<DbSet<ScientificWork>> _mockDbSetScientificWorks = MockProvider.GetMockSet(GetTestScientificWorks().AsQueryable());
18  private readonly Mock<DbSet<UserProfile>> _mockDbSetUserProfiles = MockProvider.GetMockSet(GetTestUserProfiles().AsQueryable());
19 
20  private static IEnumerable<Department> GetTestDepartments()
21  {
22  return new[]
23  {
24  TestData.Department1,
25  TestData.Department2
26  };
27  }
28 
29  private static IEnumerable<ScientificWork> GetTestScientificWorks()
30  {
31  return new[]
32  {
33  TestData.ScientificWork1,
34  TestData.ScientificWork2
35  };
36  }
37 
38  private static IEnumerable<UserProfile> GetTestUserProfiles()
39  {
40  return new[]
41  {
42  TestData.User1,
43  TestData.User2,
44  TestData.User3
45  };
46  }
47 
48  private Mock<ScientificReportDbContext> GetMockContext()
49  {
50  var mockContext = new Mock<ScientificReportDbContext>();
51  mockContext.Setup(item => item.Departments).Returns(_mockDbSetDepartments.Object);
52  mockContext.Setup(item => item.ScientificWorks).Returns(_mockDbSetScientificWorks.Object);
53  mockContext.Setup(item => item.UserProfiles).Returns(_mockDbSetUserProfiles.Object);
54  return mockContext;
55  }
56 
57  [Fact]
58  public void GetAllTest()
59  {
60  var list = GetTestDepartments().AsQueryable();
61 
62  var mockContext = new Mock<ScientificReportDbContext>();
63  mockContext.Setup(item => item.Departments).Returns(MockProvider.GetMockSet(list).Object);
64  var service = new DepartmentService(mockContext.Object);
65 
66  var actual = service.GetAll();
67 
68  Assert.Equal(list.Count(), actual.Count());
69  }
70 
71  [Fact]
72  public void GetAllWhereTest()
73  {
74  var service = new DepartmentService(GetMockContext().Object);
75  var actual = service.GetAllWhere(u => u.Id.Equals(TestData.Department1.Id));
76  Assert.Single(actual);
77  }
78 
79  [Fact]
80  public void GetByIdTest()
81  {
82  var expected = GetTestDepartments().First();
83  var service = new DepartmentService(GetMockContext().Object);
84 
85  var actual = service.GetById(expected.Id);
86 
87  Assert.NotNull(actual);
88  Assert.Equal(expected.Id, actual.Id);
89  }
90 
91  [Fact]
92  public void CreateItemTest()
93  {
94  var service = new DepartmentService(GetMockContext().Object);
95 
96  var expected = TestData.Department3;
97  service.CreateItem(expected);
98 
99  _mockDbSetDepartments.Verify(m => m.Add(It.IsAny<Department>()), Times.Once);
100  }
101 
102  [Fact]
103  public void UpdateItemTest()
104  {
105  var service = new DepartmentService(GetMockContext().Object);
106 
107  var expected = GetTestDepartments().First();
108  expected.Title = TestData.Department3.Title;
109  service.UpdateItem(expected);
110 
111  _mockDbSetDepartments.Verify(m => m.Update(expected), Times.Once);
112  }
113 
114  [Fact]
115  public void DeleteItemTest()
116  {
117  var mockContext = GetMockContext();
118  var service = new DepartmentService(mockContext.Object);
119 
120  var item = mockContext.Object.Departments.First();
121 
122  Assert.True(service.Exists(item.Id));
123 
124  service.DeleteById(item.Id);
125 
126  Assert.False(service.Exists(item.Id));
127  }
128 
129  [Fact]
130  public void ExistsTest()
131  {
132  var service = new DepartmentService(GetMockContext().Object);
133 
134  var item = GetTestDepartments().First();
135  var exists = service.Exists(item.Id);
136 
137  Assert.True(exists);
138  }
139 
140  [Fact]
141  public void DoesNotExistTest()
142  {
143  var service = new DepartmentService(GetMockContext().Object);
144 
145  var item = TestData.Department3;
146  var exists = service.Exists(item.Id);
147 
148  Assert.False(exists);
149  }
150 
151  [Fact]
152  public void AddScientificWorkTest()
153  {
154  var mockContext = GetMockContext();
155  var service = new DepartmentService(GetMockContext().Object);
156 
157  var department = mockContext.Object.Departments.First();
158  Assert.Equal(0, department.ScientificWorks.Count);
159 
160  var sw = mockContext.Object.ScientificWorks.Last();
161  service.AddScientificWork(department.Id, sw);
162 
163  department = _mockDbSetDepartments.Object.First();
164  Assert.Equal(1, department.ScientificWorks.Count);
165  }
166 
167  [Fact]
169  {
170  var mockContext = GetMockContext();
171  var service = new DepartmentService(mockContext.Object);
172 
173  var department = mockContext.Object.Departments.First();
174  Assert.Equal(1, department.ScientificWorks.Count);
175 
176  var sw = mockContext.Object.ScientificWorks.First();
177  service.RemoveScientificWork(department.Id, sw);
178 
179  department = mockContext.Object.Departments.First();
180  Assert.Equal(0, department.ScientificWorks.Count);
181  }
182 
183  [Fact]
184  public void AddUserTest()
185  {
186  var mockContext = GetMockContext();
187  var service = new DepartmentService(mockContext.Object);
188 
189  var department = mockContext.Object.Departments.First();
190 
191  service.AddUser(department.Id, TestData.User3);
192 
193  department = mockContext.Object.Departments.First();
194 
195  Assert.Equal(3, department.Staff.Count);
196  }
197 
198  [Fact]
199  public void RemoveUserTest()
200  {
201  var mockContext = GetMockContext();
202  var service = new DepartmentService(mockContext.Object);
203 
204  var department = mockContext.Object.Departments.First();
205  Assert.Equal(3, department.Staff.Count);
206 
207  var user1 = mockContext.Object.UserProfiles.First();
208 
209  service.RemoveUser(department.Id, user1);
210  department = mockContext.Object.Departments.First();
211 
212  Assert.Equal(2, department.Staff.Count);
213  }
214 
215  [Fact]
216  public void UserIsHiredTest()
217  {
218  var mockContext = GetMockContext();
219  var service = new DepartmentService(mockContext.Object);
220 
221  var actual = service.UserIsHired(TestData.User3);
222  Assert.True(actual);
223 
224  actual = service.UserIsHired(TestData.User2);
225  Assert.False(actual);
226  }
227 
228  [Fact]
229  public void GetPageTest()
230  {
231  var service = new DepartmentService(GetMockContext().Object);
232  var expected = _mockDbSetDepartments.Object.AsQueryable();
233 
234  Assert.NotNull(expected);
235 
236  var count = expected.Count();
237  var actual = service.GetPage(1, count);
238 
239  Assert.NotNull(actual);
240  Assert.Equal(count, actual.Count());
241  }
242 
243  [Fact]
244  public void GetCountTest()
245  {
246  var service = new DepartmentService(GetMockContext().Object);
247  var expected = _mockDbSetDepartments.Object.AsQueryable();
248 
249  Assert.Equal(expected.Count(), service.GetCount());
250  }
251  }
252 }