Projekt

Obecné

Profil

« Předchozí | Další » 

Revize ea53e0e1

Přidáno uživatelem Jakub Schenk před asi 2 roky(ů)

user testing

first of was user testing mandatory, before testing autentization - with this user should be properly tested

Zobrazit rozdíly:

Backend/BackendTesting/UserManagementTesting.cs
13 13
using Core.MapperProfiles;
14 14
using Core.Contexts;
15 15
using Microsoft.Extensions.Configuration;
16
using Models.Users;
16 17

  
17 18
namespace Core.Services
18 19
{
19
    public class UserContext : DatabaseContext
20
    [TestClass]
21
    public class UserManagementTesting      //testing of Core/Services/UserService
20 22
    {
21
        public UserContext(IConfiguration configuration) : base(configuration) { }
23
        private static readonly IConfiguration configuration = new ConfigurationBuilder().Build();
24
        public DatabaseContext ctx;
25

  
26
        public Core.Services.IUserService US;
27
        public UserManagementTesting()
28
        {
29
            this.ctx = new DatabaseContext(configuration);
30
            this.US = new UserServiceEF(this.ctx, TestingLogger.GetLogger(), TestingMapper.GetMapper());
31

  
32
            ctx.Database.EnsureDeleted();
33
            ctx.Database.EnsureCreated();
34

  
35
            //vytvoření dat pro testování
36
            var userList = new List<User>();
37
            userList.Add(new User() { Username = "aaa", Name = "aaa", Surname = "aaa", Password = "aaa", Role = Models.Enums.ERole.ANNOTATOR });
38
            userList.Add(new User() { Username = "bbb", Name = "bbb", Surname = "bbb", Password = "bbb", Role = Models.Enums.ERole.ANNOTATOR });
39
            userList.Add(new User() { Username = "ccc", Name = "ccc", Surname = "ccc", Password = "ccc", Role = Models.Enums.ERole.ADMINISTRATOR });
40
            userList.Add(new User() { Username = "ddd", Name = "ddd", Surname = "ddd", Password = "ddd", Role = Models.Enums.ERole.ANNOTATOR });
41
            userList.Add(new User() { Username = "eee", Name = "eee", Surname = "eee", Password = "eee", Role = Models.Enums.ERole.ANNOTATOR });
42
            userList.Add(new User() { Username = "fff", Name = "fff", Surname = "fff", Password = "fff", Role = Models.Enums.ERole.ANNOTATOR });
43
            userList.Add(new User() { Username = "ggg", Name = "ggg", Surname = "ggg", Password = "ggg", Role = Models.Enums.ERole.ANNOTATOR });
44
            userList.Add(new User() { Username = "hhh", Name = "hhh", Surname = "hhh", Password = "hhh", Role = Models.Enums.ERole.ADMINISTRATOR });
45
            userList.Add(new User() { Username = "iii", Name = "iii", Surname = "iii", Password = "iii", Role = Models.Enums.ERole.ADMINISTRATOR });
46
            userList.Add(new User() { Username = "jjj", Name = "jjj", Surname = "jjj", Password = "jjj", Role = Models.Enums.ERole.ADMINISTRATOR });
22 47

  
23
        //public static ILoggerFactory logger = LoggerFactory.Create(builder => { builder.AddConsole(); });
24
        public ILogger logger = new LoggerConfiguration().WriteTo.Console().CreateLogger(); /* logger */
48
            //nahrani do databaze
49
            foreach (var user in userList)
50
            {
51
                US.CreateUser(user.Username, user.Name, user.Surname, user.Password, user.Role);
52
            }
53
            ctx.SaveChanges();
54
        }
25 55

  
26
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
56
        [TestMethod]
57
        [DataRow("kkk", "kkk", "kkk", "kkk", ERole.ANNOTATOR, true)]
58
        [DataRow("lll", "lll", "lll", "", ERole.ANNOTATOR, true)]
59
        [DataRow("mmm", "mmm", "", "mmm", ERole.ANNOTATOR, true)]
60
        [DataRow("nnn", "", "nnn", "nnn", ERole.ANNOTATOR, true)]
61
        [DataRow("", "ooo", "ooo", "ooo", ERole.ADMINISTRATOR, false)]
62
        //method tests saving user into database, retrieving all users checking if the one saved is between them
63
        public void CreateUser_Test(string username, string name, string surname, string password, ERole role, bool shouldBeRigh)
27 64
        {
28
            base.OnConfiguring(optionsBuilder);
29
            optionsBuilder.UseSqlite("Data source=db.sqlite", b => b.MigrationsAssembly("RestAPI"));
30
            //optionsBuilder.(logger);
65
            //creation of new user
66
            var output = US.CreateUser(username, name, surname, password, role);
67
            ctx.SaveChanges();
68
            if (output == null && !shouldBeRigh)
69
            {
70
                //trying to insert user with taken username resolves with refusing 
71
                return;
72
            }
73

  
74
            //check for empty atributes
75
            if((username == null || username == "")&& output!=null)
76
            {
77
                Assert.Fail("user with no username created");
78
                return;
79
            }
80
            if ((name == null || name == "") && output != null)
81
            {
82
                Assert.Fail("user with no name created");
83
                return;
84
            }
85
            if ((surname == null || surname == "") && output != null)
86
            {
87
                Assert.Fail("user with no surname created");
88
                return;
89
            }
90
            if ((password == null || password == "") && output != null)
91
            {
92
                Assert.Fail("user with no password created");
93
                return;
94
            }
95

  
96
            //retrieving all users checking via username
97
            foreach (var user in ctx.Users)
98
            {
99
                if (user.Username == username)
100
                {
101
                    //checking, that user with wanted username was not changed
102
                    /*Assert.AreEqual(expected.Username, user.Username);*/
103
                    Assert.AreEqual(name, user.Name);
104
                    Assert.AreEqual(surname, user.Surname);
105
                    Assert.AreNotEqual(password, user.Password);
106
                    Assert.AreEqual(role, user.Role);
107
                    return;
108
                }
109
            }
110
            //if there was username not found, inserted user must have been changed or wasnt saved into database at all - test fails
111
            Assert.Fail("supposedly created user was not found in database");
31 112
        }
32 113

  
33
    }
34
    [TestClass]
35
    public class UserManagementTesting      //testing of Core/Services/UserService
36
    {
114
        [TestMethod]
115
        [DataRow("aaa", "aaa", "aaa", "aaa", "aaa", ERole.ANNOTATOR)]
116
        [DataRow("bbb", "bbb", "bbb", "bbb", "bbb", ERole.ANNOTATOR)]
117
        [DataRow("ccc", "ccc", "ccc", "ccc", "ccc", ERole.ADMINISTRATOR)]
118
        //method testing, that user searched by username is the one wanted - data are inserted before
119
        public void GetUserByUsername_Test(string insertedUsername, string username, string name, string surname, string password, ERole role)
120
        {
121
            User? actual = US.GetUserByUsername(insertedUsername);
122
            Assert.AreEqual(username, actual.Username, "wrong username");
123
            Assert.AreEqual(name, actual.Name, "wrong name");
124
            Assert.AreEqual(surname, actual.Surname, "wrong surname");
125
            Assert.AreNotEqual(password, actual.Password, "same password");
126
            Assert.AreEqual(role, actual.Role, "wrong role");
127
        }
128

  
129
        [TestMethod]
130
        [DataRow("aaa", "aaa", "aaa", "aaa", ERole.ANNOTATOR)]
131
        [DataRow("bbb", "bbb", "bbb", "bbb", ERole.ANNOTATOR)]
132
        [DataRow("ccc", "ccc", "ccc", "ccc", ERole.ADMINISTRATOR)]
133
        public void GetUserById_Test(string username, string name, string surname, string password, ERole role)
134
        {
135
            //TODO Find id other way then via another tested method
136
            User? expected = US.GetUserByUsername(username);
137
            if (expected == null)
138
            {
139
                Assert.Fail();
140
                return;
141
            }
142

  
143
            User? actual = US.GetUserById(expected.Id);
144

  
145
            //testing whole users
146
            Assert.AreEqual(expected, actual);
147

  
148
            //testing all parameters
149
            Assert.AreEqual(actual.Username, username);
150
            Assert.AreEqual(actual.Name, name);
151
            Assert.AreEqual(actual.Surname, surname);
152
            Assert.AreNotEqual(actual.Password, password);
153
            Assert.AreEqual(actual.Role, role);
154
        }
155

  
156

  
37 157

  
158

  
159
        [TestMethod]
160
        [DataRow("xxx", "xxx", "xxx", "xxx", ERole.ANNOTATOR, "uuu", "xxx", "xxx", ERole.ANNOTATOR)]
161
        [DataRow("xxx", "xxx", "xxx", "xxx", ERole.ANNOTATOR, "xxx", "uuu", "xxx", ERole.ANNOTATOR)]
162
        [DataRow("xxx", "xxx", "xxx", "xxx", ERole.ANNOTATOR, "xxx", "xxx", "uuu", ERole.ANNOTATOR)]
163
        [DataRow("xxx", "xxx", "xxx", "xxx", ERole.ANNOTATOR, "aaa", "bbb", "ccc", ERole.ANNOTATOR)]
164
        [DataRow("xxx", "xxx", "xxx", "xxx", ERole.ANNOTATOR, "xxx", "bbb", "ccc", ERole.ANNOTATOR)]
165
        [DataRow("xxx", "xxx", "xxx", "xxx", ERole.ANNOTATOR, "xxx", "xxx", "xxx", ERole.ADMINISTRATOR)]
166
        [DataRow("xxx", "xxx", "xxx", "xxx", ERole.ANNOTATOR, "xxx", "bbb", "ccc", ERole.ADMINISTRATOR)]
167
        public void UpdateUser_Test(string oldUsername, string oldName, string oldSurname, string password, ERole oldRole, string? username = null, string? name = null, string? surname = null, ERole? role = null)
168
        {
169
            User? newUser = US.CreateUser(oldUsername, oldName, oldSurname, password, oldRole);
170
            if(newUser == null)
171
            {
172
                Assert.Fail("user not created");
173
            }
174
            User? actual = US.UpdateUser(newUser, username, name, surname, role);
175

  
176
            Assert.IsNotNull(actual);
177
            Assert.AreEqual(username, actual.Username, "wrong username");
178
            Assert.AreEqual(name, actual.Name, "wrong name");
179
            Assert.AreEqual(surname, actual.Surname, "wrong surname");
180
            Assert.AreEqual(role, actual.Role, "wrong role");
181
            Assert.AreNotEqual(password, actual.Password, "same password");
182

  
183
        }
184
        [TestMethod]
185
        [DataRow("aaa", "bbb")]//anotator
186
        [DataRow("ccc", "aaa")]//admin
187
        [DataRow("bbb", "")]//set to none password
188
        [DataRow("eee", "eee")]//keep old password
189
        public void ChangePassword_Test(string username, string newPassword) 
190
        {
191
            //get user
192
            User? changingUser = US.GetUserByUsername(username);
193
            if(changingUser == null)
194
            {
195
                Assert.Fail("user not found");
196
                return;
197
            }
198
            //get old password hash
199
            var oldPassword = changingUser.Password;
200

  
201
            //change password
202
            User? changed = US.ChangePassword(changingUser, newPassword);
203
            //new password is not empty and database returned null for user (user had to be there)
204
            if(changed == null && (newPassword!="" || newPassword != null))
205
            {
206
                Assert.Fail("user not returned");
207
                return;
208
            }
209
            //new password is empty
210
            if((newPassword == "" || newPassword == null) && changed != null)
211
            {
212
                Assert.Fail("empty password was accepted");
213
                return;
214
            }
215
            //no user was returned back after ChangePassword
216
            if(changed == null)
217
            {
218
                Assert.Fail("user not returned or found or there was mistake in password change");
219
                return;
220
            }
221

  
222
            //get new password hash
223
            var renewedPassword = changed.Password;
224

  
225
            Assert.AreNotEqual(oldPassword, renewedPassword, "password was not changed or it was changed on same value");
226

  
227
        }
228
        [TestMethod]
229
        [DataRow("aaa", "aaa")]//anotator
230
        [DataRow("fff", "fff")]//anotator
231
        [DataRow("iii", "iii")]//admin
232
        public void CheckUsernamePassword_Correct(string username, string password)
233
        {
234
            User? checkedUser = US.CheckUsernamePassword(username, password);
235
            if(checkedUser == null)
236
            {
237
                //there are just correct users - this should have returned user
238
                Assert.Fail("there are just correct users - this should have returned user");
239
                return;
240
            }
241
            User? expected = US.GetUserByUsername(username);
242
            if(expected == null)
243
            {
244
                Assert.Fail("There is mistake in tested data");
245
                return;
246
            }
247
            Assert.AreEqual(expected, checkedUser);
248
        }
249

  
250
        [TestMethod]
251
        [DataRow("aaa", "bbb")]//changedPassword?
252
        [DataRow("fff", "fgh")]//anotator
253
        [DataRow("iii", "123")]//admin
254
        public void CheckUsernamePassword_Incorrect(string username, string password)
255
        {
256
            User? checkedUser = US.CheckUsernamePassword(username, password);
257
            if (checkedUser != null)
258
            {
259
                //there are just correct users - this should have returned user
260
                Assert.Fail("there are just incorrect users-passwords - this should not return user");
261
                return;
262
            }
263
        }
264

  
265
        [TestMethod]
266
        [DataRow("fff", "fff", "123")]//anotator
267
        [DataRow("iii", "iii", "456")]//admin
268
        public void CheckUsernamePassword_ChangedPassword(string username, string oldPassword, string newPassword)
269
        {
270
            //get user from database
271
            User? oldUser = US.CheckUsernamePassword(username, oldPassword);
272
            if (oldUser == null) 
273
            {
274
                Assert.Fail("This should have returned user - there are wrong input data");
275
                return;
276
            }
277
            //change users password
278
            User? changedUser = US.ChangePassword(oldUser, newPassword);
279
            //update database so changes are recognisable
280
            ctx.SaveChanges();
281
            if (changedUser == null)
282
            {
283
                Assert.Fail("There is mistake in another method \"ChangePassword\" test it!");
284
            }
285
            //check if new password is in place
286
            User? newUser = US.CheckUsernamePassword(username, newPassword);
287
            if(newUser == null)
288
            {
289
                Assert.Fail("No user was returned - password probably wasnt changed");
290
            }
291
            Assert.AreEqual(oldUser.Username, newUser.Username, "returned users usernames are not same");
292
            Assert.AreEqual(oldUser.Name, newUser.Name, "returned users names are not same");
293
            Assert.AreEqual(oldUser.Surname, newUser.Surname, "returned users surnames are not same");
294
            Assert.AreEqual(oldUser.Role, newUser.Role, "returned users roles are not same");
295

  
296
            //check if there is no way to login with old password
297
            User? oldPasswordTester = US.CheckUsernamePassword(username, oldPassword);
298
            if(oldPasswordTester != null)
299
            {
300
                Assert.Fail("old password is still viable after password change");
301
            }
302
        }
303
        [TestMethod]
304
        [DataRow(10)]//expected number of users in database
305
        public void GetUsers_Test(int expected)
306
        {
307
            var userList = US.GetUsers();
308
            Assert.AreEqual(expected, userList.Users.Count, "I counted poorly probably");
309
        }
38 310
    }
39 311
}

Také k dispozici: Unified diff