Skip to content
Snippets Groups Projects
Commit 4b10513a authored by Dmytro Bogatov's avatar Dmytro Bogatov :two_hearts:
Browse files

Fix the issue.

parent f18febdd
Branches
No related tags found
No related merge requests found
Pipeline #
......@@ -8,6 +8,7 @@ using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using System.Reflection;
namespace StatusMonitor.Shared.Services
{
......@@ -185,15 +186,30 @@ namespace StatusMonitor.Shared.Services
/// </summary>
private bool SeedSpecificEntity<T>(List<T> values, DbSet<T> dbSets) where T : class
{
if (values.Count != dbSets.Count())
var inserted = false;
foreach (var item in values)
{
dbSets.Clear();
_context.SaveChanges();
dbSets.AddRange(values);
if (dbSets.Any(i => i == item))
{
var element = dbSets.Single(i => i == item);
PropertyInfo[] properties = typeof(T).GetProperties();
foreach (PropertyInfo property in properties)
{
property.SetValue(element, property.GetValue(item));
}
}
else
{
dbSets.Add(item);
inserted = true;
}
_context.SaveChanges();
return true;
}
return false;
return inserted;
}
/// <summary>
......@@ -206,20 +222,33 @@ namespace StatusMonitor.Shared.Services
/// These are to be replaced by values.</param>
/// <returns>True if values has been replaced, false if values were in sync and did not require
/// replacement.</returns>
private async Task<bool> SeedSpecificEntityAsync<T>(List<T> values, DbSet<T> dbSets, bool ignoreCount = false) where T : class
private async Task<bool> SeedSpecificEntityAsync<T>(List<T> values, DbSet<T> dbSets) where T : class
{
if (values.Count != await dbSets.CountAsync() || ignoreCount)
var inserted = false;
foreach (var item in values)
{
if (await dbSets.AnyAsync(i => i == item))
{
if (!ignoreCount)
var element = await dbSets.SingleAsync(i => i == item);
PropertyInfo[] properties = typeof(T).GetProperties();
foreach (PropertyInfo property in properties)
{
dbSets.Clear();
property.SetValue(element, property.GetValue(item));
}
}
else
{
await dbSets.AddAsync(item);
inserted = true;
}
await _context.SaveChangesAsync();
await dbSets.AddRangeAsync(values);
await _context.SaveChangesAsync();
return true;
}
return false;
return inserted;
}
}
}
......@@ -82,7 +82,7 @@ namespace StatusMonitor.Tests.UnitTests.Services
}
[Fact]
public async Task ProperlyUpdatesData()
public async Task ProperlyAddsData()
{
// Arrange
var dataSeedService = new DataSeedService(
......@@ -95,6 +95,7 @@ namespace StatusMonitor.Tests.UnitTests.Services
new CompilationStage { Id = CompilationStages.M4.AsInt(), Name = "M4 stage" },
new CompilationStage { Id = CompilationStages.SandPiper.AsInt(), Name = "SandPiper" }
});
await _dataContext.SaveChangesAsync();
// Act
await dataSeedService.SeedDataAsync();
......@@ -106,6 +107,29 @@ namespace StatusMonitor.Tests.UnitTests.Services
);
}
[Fact]
public async Task ProperlyUpdatesData()
{
// Arrange
var dataSeedService = new DataSeedService(
_dataContext,
new Mock<ILogger<DataSeedService>>().Object,
_config
);
await _dataContext.CompilationStages.AddRangeAsync(new List<CompilationStage> {
new CompilationStage { Id = CompilationStages.M4.AsInt(), Name = "M5 stage" }, // here it is
new CompilationStage { Id = CompilationStages.SandPiper.AsInt(), Name = "SandPiper" }
});
await _dataContext.SaveChangesAsync();
// Act
await dataSeedService.SeedDataAsync();
// Assert
Assert.Equal("test-title", (await _dataContext.CompilationStages.SingleAsync(st => st.Id == CompilationStages.M4.AsInt())).Name);
}
[Fact]
public async Task NoDuplicates()
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment