1: [TestFixture]
2: public class When_Updating_Employee_Information_With_sequence_Test : Test_Context<EmployeeRequests>
3: {
4: public Mock<IAuthRequests> AuthRequestsMock;
5: public bool ExpectedAuth;
6: public int UserId;
7: public int EmployeeId;
8: public bool Actual;
9: public bool Expected;
10: public EmployeeDto UpdateEmployee;
11: public EmployeeDto SentEmployee;
12: public UserDto ExpectedUser;
13: public Mock<IEmployeeRepository> MockEmployeeRepository;
14: public int Counter;
15: public Dictionary<string, int> Sequence;
16:
17: public override void Context()
18: {
19: base.Context();
20: UserId = 12;
21: EmployeeId = 14;
22: Expected = true;
23: ExpectedAuth = true;
24: UpdateEmployee = new EmployeeDto { Id = EmployeeId };
25: Counter = 0;
26: Sequence = new Dictionary<string, int>();
27: Target.User.Id = UserId;
28: AuthRequestsMock = new Mock<IAuthRequests>();
29: MockEmployeeRepository = new Mock<IEmployeeRepository>();
30:
31: AuthRequestsMock.Setup(x => x.UserCanUpdateEmployee(UserId, EmployeeId))
32: .Callback(() => Sequence.Add("AuthRequests.UserCanUpdateEmployee", Counter++)).Returns(ExpectedAuth);
33: MockEmployeeRepository.Setup(x => x.UpdateEmployee(It.IsAny<EmployeeDto>()))
34: .Callback<EmployeeDto>(x =>
35: {
36: SentEmployee = x;
37: Sequence.Add("EmployeeRepository.UpdateEmployee", Counter++);
38: }).Returns(Expected);
39:
40: Target.AuthRequests = AuthRequestsMock.Object;
41: Target.EmployeeRepository = MockEmployeeRepository.Object;
42: }
43:
44: public override void Because()
45: {
46: Actual = Target.UpdateEmployee(UpdateEmployee);
47: }
48:
49: [Test]
50: public void Calls_AuthRequests_UserCanUpdateEmployee_Test()
51: {
52: AuthRequestsMock.Verify(x => x.UserCanUpdateEmployee(UserId, EmployeeId), Times.Once());
53: }
54:
55: [Test]
56: public void Calls_AuthRequests_UserCanUpdateEmployee_Inorder_Test()
57: {
58: Assert.AreEqual(0, Sequence["AuthRequests.UserCanUpdateEmployee"]);
59: }
60:
61: [Test]
62: public void Calls_EmployeeRepository_UpdateEmployee_Test()
63: {
64: MockEmployeeRepository.Verify(x => x.UpdateEmployee(It.IsAny<EmployeeDto>()), Times.Once());
65: }
66:
67: [Test]
68: public void Calls_EmployeeRepository_UpdateEmployee_Inorder_Test()
69: {
70: Assert.AreEqual(1, Sequence["EmployeeRepository.UpdateEmployee"]);
71: }
72:
73: [Test]
74: public void Sends_expected_Emplyee_test()
75: {
76: Assert.AreEqual(UpdateEmployee.Id, SentEmployee.Id);
77: }
78:
79: [Test]
80: public void Returns_Expected_Result_Test()
81: {
82: Assert.IsTrue(Actual);
83: }
84: }