2using System.Collections.Generic;
3using System.Threading.Tasks;
7using Microsoft.Data.Sqlite;
8using Microsoft.EntityFrameworkCore;
10using Xunit.Abstractions;
39 var res = await moduleService.GetAllModules();
56 var moduleName =
context.Modules.FindAsync(1).Result.ModuleName;
60 var res = await moduleService.GetAllModules();
64 Assert.Equal(moduleName, res[0].ModuleName);
80 var res = await moduleService.GetModuleById(100);
100 var res = await moduleService.GetModuleById(1);
120 var res = Task.Run(() => moduleService.AddModule(
new Module()
122 ModuleName =
"Module1"
144 var op = async () => await moduleService.AddModule(
new Module()
146 ModuleName =
"Module1"
151 await Assert.ThrowsAsync<ArgumentNullException>(op);
168 var op = async () => await moduleService.AddModule(
new Module()
170 ModuleName =
"FirstModule",
171 ProductSeq =
context.Products.ToListAsync().Result.Find(p => p.ProductName ==
"BestProductEver").ProductSeq
174 await Assert.ThrowsAsync<InvalidOperationException>(op);
196 var bestProductEver =
context.Products.ToListAsync().Result.Find(p => p.ProductName ==
"BestProductEver");
200 Assert.Equal(moduleFromDb.ModuleSeq, bestProductEver.Modules.Find(m => m.ProductSeq == bestProductEver.ProductSeq).ModuleSeq);
201 Assert.Equal(moduleFromDb.ModuleName, bestProductEver.Modules.Find(m => m.ProductSeq == bestProductEver.ProductSeq).ModuleName);
216 await
context.SaveChangesAsync();
220 ModuleName =
"NewModule",
225 ModuleName =
"AnotherModule",
228 await
context.SaveChangesAsync();
233 var anotherModule = await
context.Modules.FindAsync(2);
234 anotherModule.ModuleName =
"NewModule";
235 var op = async () => await moduleService.
UpdateModule(anotherModule);
238 await Assert.ThrowsAsync<InvalidOperationException>(op);
257 var moduleFromDb = moduleService.
GetAllModules().Result.Find(m => m.ModuleName ==
"FirstModule");
259 Assert.Equal(
"BestProductEver", products.Find(m => m.ProductSeq == moduleFromDb.ProductSeq).ProductName);
261 moduleFromDb!.ProductSeq = products.Find(p => p.ProductName ==
"AnotherProduct").ProductSeq;
264 moduleFromDb = moduleService.
GetAllModules().Result.Find(m => m.ModuleName ==
"FirstModule");
267 Assert.Equal(
"AnotherProduct", products.Find(m => m.ProductSeq == moduleFromDb.ProductSeq).ProductName);
285 var moduleFromDb = moduleService.
GetAllModules().Result.Find(m => m.ModuleName ==
"FirstModule");
286 moduleFromDb.ProductSeq = 534;
287 var op = async () => await moduleService.
UpdateModule(moduleFromDb);
290 await Assert.ThrowsAsync<DbUpdateException>(op);
307 var moduleFromDb = moduleService.
GetAllModules().Result.Find(m => m.ModuleName ==
"FirstModule");
308 moduleFromDb.Product =
null;
309 var op = async () => await moduleService.
UpdateModule(moduleFromDb);
312 await Assert.ThrowsAsync<InvalidOperationException>(op);
329 var moduleFromDbModuleSeq = moduleService.
GetAllModules().Result.Find(m => m.ModuleName ==
"FirstModule").ModuleSeq;
332 var deactivatedModule = moduleService.
GetAllModules().Result.Find(m => m.ModuleName ==
"FirstModule");
335 Assert.Equal(
false, deactivatedModule.IsActive);
348 var product =
context.Products.Add(
new Product() { ProductName =
"BestProductEver" });
349 await
context.SaveChangesAsync();
356 ModuleLevelName =
"Duplicate",
357 ModuleLevelRestriction =
"Res"
360 var moduleLevels =
new List<ModuleLevel>
366 var newModule =
new Module()
369 ModuleName =
"ModuleName",
370 ModuleLevels = moduleLevels
374 var op = async () => await
service.AddModule(newModule);
376 var ex = await Assert.ThrowsAsync<InvalidOperationException>(op);
377 Assert.Equal(
"Modulnivåer kan ikke ha samme navn.", ex.Message);
390 var product =
context.Products.Add(
new Product() { ProductName =
"BestProductEver" });
391 await
context.SaveChangesAsync();
398 ModuleLevelName =
"Duplicate",
399 ModuleLevelRestriction =
"Res"
404 ModuleLevelName =
"Not duplicate",
405 ModuleLevelRestriction =
"Res"
408 var moduleLevels =
new List<ModuleLevel>
414 var newModule =
new Module()
417 ModuleName =
"ModuleName",
418 ModuleLevels = moduleLevels
421 var res = await
service.AddModule(newModule);
423 Assert.Equal(2, res.ModuleLevels.Count);
440 var moduleFromDb = moduleService.
GetAllModules().Result.Find(m => m.ModuleName ==
"FirstModule");
443 Assert.False(moduleFromDb.IsActive);
445 var updatedModule = moduleService.
GetAllModules().Result.Find(m => m.ModuleName ==
"FirstModule");
448 var activatedModule = moduleService.
GetAllModules().Result.Find(m => m.ModuleName ==
"FirstModule");
451 Assert.True(activatedModule.IsActive);
ModuleService class inserts and updates Module in the Database
async Task< Module > GetModuleById(int id)
Read one Module with id from database
async Task< Module > UpdateModule(Module module)
Updates changes on a Module in the database
async Task< Module > ActivateModule(int moduleSeq)
Activates a Module by setting IsActive attribute to true
async Task< Module > DeactivateModule(int moduleSeq)
Deactivated a Module by setting IsActive attribute to false
async Task< List< Module > > GetAllModules()
Read all Modules from database
ProductService class inserts and updates Product in the Database
async Task< List< Product > > GetAllProducts()
Read all Products from database
ModuleService Testing Environment
ModuleServiceTest(ITestOutputHelper testOutputHelper)
async void GetAllModules_NotEmptyAndCorrectObject()
passes if after insertion module-list is not empty and added module is same as in list
async void UpdateModule_ChangeProductForModuleSuccess()
passes if product reference is correctly changed when updating product reference
async Task AddModule_ProductIdNotExisting()
async void AddModule_CheckDupliacteModuleLevelNames()
passes if trying to add new modulelevel with already existing modulelevelname
async void UpdateModule_DuplicateNameCheck()
passes if trying to update modulename to name that already exist in module-list, and throws InvalidOp...
async void DeactiveModule_Success()
passes if moduleinactiv is set to false
async void AddModule_ModuleLevelsNotDuplicateNames()
passes if correctly added modulelevelnames in module for insertion
async void GetModuleById_ModuleExisting()
passes if module is found by id
async void AddModule_ProductHasCorrectModule()
passes if product-list contain correct modules from
async void AddModule_ProductRefMissing()
passes if trying to add module without product reference, and it throws DbUpdateException
async void UpdateModule_ChangeProductSetNullShouldFail()
passes if trying to set module's product reference to null, and it throws InvalidOperationException
readonly ITestOutputHelper _testOutputHelper
async void ActiveModule_Success()
passes if inactive module(module.isActive = false) is set to true
async void AddModule_DuplicateName()
passes if modulename already exist in module-list, and throws InvalidOperationException
async void UpdateModule_ChangeProductToProductSeqNotExisting()
passes if trying to change module's product ref to a product that doesn't exist, and it throws a DbUp...
async void GetAllModules_IsEmpty()
passes if module-list is empty
async void GetModuleById_ModuleNotExisting()
passes if module with moduleid does not exist, returned null
static DataContext GetContext()
Creates a testcontext for testing
Reusable methods for inserting information into tests
static DataContext InsertProductAndModule(DataContext context)
Inserts Product and Module into the context Used for inserting product and module into the test envir...
static Product CreateProduct()
Creates a Product
static DataContext InsertDoubleProductAndModule(DataContext context)
Inserts two Product and Module into the context Used for inserting product and module into the test e...