Backend/e-suite.Modules.GlossariesManager/GlossariesManager.UnitTests/AddGlossaryEntryUnitTests.cs

473 lines
16 KiB
C#

using e_suite.API.Common.models;
using e_suite.Database.Audit;
using e_suite.Database.Core.Extensions;
using e_suite.Database.Core.Tables.CustomFields;
using eSuite.Core.Miscellaneous;
using GlossariesManager.UnitTests.Helpers;
using Moq;
using NUnit.Framework;
namespace GlossariesManager.UnitTests;
[TestFixture]
public class AddGlossaryEntryUnitTests : GlossariesManagerTestBase
{
[SetUp]
public override async Task Setup()
{
await base.Setup();
}
[Test]
public Task AddGlossary_WhenAddingNewItem_AddsItemCorrectly()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var glossaryItem = new NewGlossaryItem
{
Name = "test root item",
};
//Act
GlossariesManager.AddGlossaryItem(auditUserDetails, glossaryItem, default);
//Assert
Assert.Multiple(() =>
{
Assert.That(GlossariesManagerRepository.Glossaries.Count, Is.EqualTo(1));
Assert.That(GlossariesManagerRepository.Glossaries[0].Guid, Is.Not.Null);
});
return Task.CompletedTask;
}
[Test]
public Task AddGlossary_WhenParentIsNull_AddsNewRootItem()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var glossaryItem = new NewGlossaryItem
{
Name = "test root item",
Parent = null!
};
//Act
GlossariesManager.AddGlossaryItem(auditUserDetails, glossaryItem, default);
//Assert
Assert.Multiple(() =>
{
Assert.That(GlossariesManagerRepository.Glossaries.Count, Is.EqualTo(1));
Assert.That(GlossariesManagerRepository.Glossaries[0].Guid, Is.Not.Null);
});
return Task.CompletedTask;
}
[Test]
public Task AddGlossary_WhenParentIsMissing_ThrowsExpectedException()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var glossaryItem = new NewGlossaryItem
{
Name = "test root item",
Parent = new GeneralIdRef
{
Guid = new Guid("{E94BA53F-6802-4045-BE8F-CA1047CB34F9}")
}
};
//Act & Assert
Assert.Multiple(() =>
{
Assert.ThrowsAsync<NullReferenceException>(async () =>
await GlossariesManager.AddGlossaryItem(auditUserDetails, glossaryItem, default));
Assert.That(GlossariesManagerRepository.Glossaries.Count, Is.EqualTo(0));
});
return Task.CompletedTask;
}
[Test]
public Task AddGlossary_WhenParentIsPresent_AddsNewItem()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var parentGlossaryItem = new NewGlossaryItem
{
Name = "test root item",
Parent = null!,
Guid = new Guid("{C2F67C75-FE0C-4388-B474-C1B22BEEF443}")
};
GlossariesManager.AddGlossaryItem(auditUserDetails, parentGlossaryItem, default);
var glossaryItem = new NewGlossaryItem
{
Name = "Test Child Item",
Parent = new GeneralIdRef
{
Guid = parentGlossaryItem.Guid.Value
}
};
//Act
GlossariesManager.AddGlossaryItem(auditUserDetails, glossaryItem, default);
//Assert
Assert.Multiple(() =>
{
Assert.That(GlossariesManagerRepository.Glossaries.Count, Is.EqualTo(2));
Assert.That(GlossariesManagerRepository.Glossaries[1].Guid, Is.Not.Null);
});
return Task.CompletedTask;
}
[Test]
public async Task AddGlossary_WhenItemAlreadyExists_ThrowsExpectedException()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var glossaryItem = new NewGlossaryItem
{
Name = "test root item",
Guid = new Guid("{E94BA53F-6802-4045-BE8F-CA1047CB34F9}")
};
//Act
await GlossariesManager.AddGlossaryItem(auditUserDetails, glossaryItem, default);
//Assert
Assert.ThrowsAsync<ArgumentException>(async () => await GlossariesManager.AddGlossaryItem(auditUserDetails, glossaryItem, default));
}
[Test]
public async Task AddGlossary_WhenItemDefinesCustomFields_AddsNewItem()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var glossaryItem = new NewGlossaryItem
{
Name = "test root item",
Guid = new Guid("{E94BA53F-6802-4045-BE8F-CA1047CB34F9}"),
ChildCustomFieldDefinition =
[
new()
{
Guid = new Guid("{AA4D6C9C-EFE5-495B-993E-97C977EDF9D7}")
},
new()
{
Guid = new Guid("{67E85B6D-B25D-4AA7-8148-0B52BA694967}")
}
]
};
//Act
await GlossariesManager.AddGlossaryItem(auditUserDetails, glossaryItem, default);
//Assert
Assert.Multiple(() =>
{
Assert.That(GlossariesManagerRepository.Glossaries.Count, Is.EqualTo(1));
Assert.That(GlossariesManagerRepository.GlossaryCustomFields.Count, Is.EqualTo(2));
Assert.That(GlossariesManagerRepository.GlossaryCustomFields[0].CustomFieldId,
Is.EqualTo(GlossariesManagerRepository.CustomFields[0].Id));
Assert.That(GlossariesManagerRepository.GlossaryCustomFields[0].GlossaryId,
Is.EqualTo(GlossariesManagerRepository.Glossaries[0].Id));
Assert.That(GlossariesManagerRepository.GlossaryCustomFields[1].CustomFieldId,
Is.EqualTo(GlossariesManagerRepository.CustomFields[1].Id));
Assert.That(GlossariesManagerRepository.GlossaryCustomFields[1].GlossaryId,
Is.EqualTo(GlossariesManagerRepository.Glossaries[0].Id));
});
}
[Test]
public void AddGlossary_WhenNoParentWithCustomFieldValues_ThrowsExpectedException()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var glossaryItem = new NewGlossaryItem
{
Name = "test root item",
Guid = new Guid("{E94BA53F-6802-4045-BE8F-CA1047CB34F9}"),
CustomFieldValues =
[
new()
{
Id = new GeneralIdRef
{
Guid = new Guid("{ECFF9FD6-F853-45C4-8505-EC28AD7EEC17}")
}
}
]
};
//Act & Assert
Assert.ThrowsAsync<NullReferenceException>(async () => await GlossariesManager.AddGlossaryItem(auditUserDetails, glossaryItem, default));
}
[Test]
public async Task AddGlossary_WhenItemHasCustomFieldValuesAndDefinitionNotFound_ThrowsExpectedException()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var rootGlossaryItem = new NewGlossaryItem
{
Name = "test root item",
Guid = new Guid("{E94BA53F-6802-4045-BE8F-CA1047CB34F9}"),
ChildCustomFieldDefinition =
[
new()
{
Guid = new Guid("{AA4D6C9C-EFE5-495B-993E-97C977EDF9D7}")
},
new()
{
Guid = new Guid("{67E85B6D-B25D-4AA7-8148-0B52BA694967}")
}
]
};
await GlossariesManager.AddGlossaryItem(auditUserDetails, rootGlossaryItem, default);
var childGlossaryItem = new NewGlossaryItem
{
Parent = new GeneralIdRef { Guid = rootGlossaryItem.Guid },
Name = "Test Item 1",
CustomFieldValues =
[
new()
{
Id = new GeneralIdRef { Guid = new Guid("{699B9144-FBA5-406E-BF40-ED5F51D3E018}") },
Values =
[
new()
{
Value = "Hello World",
DisplayValue = "Hello World"
}
]
}
]
};
CustomFieldValidatorMock
.Setup(x => x.ValidateFields(It.IsAny<AuditUserDetails>(), It.IsAny<IEnumerable<CustomFieldValues>>(),
It.IsAny<IReadOnlyCollection<e_suite.Database.Core.Tables.CustomFields.CustomField>>(),
It.IsAny<CancellationToken>())).Throws(new NullReferenceException());
//Act & Assert
Assert.ThrowsAsync<NullReferenceException>(async () => await GlossariesManager.AddGlossaryItem(auditUserDetails, childGlossaryItem, default));
}
[Test]
public async Task AddGlossary_WhenItemHasCustomFieldValues_SavesValueCorrectly()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var customField = GlossariesManagerRepository.CustomFields[0];
var rootGlossaryItem = new NewGlossaryItem
{
Name = "test root item",
Guid = new Guid("{E94BA53F-6802-4045-BE8F-CA1047CB34F9}"),
ChildCustomFieldDefinition = [customField.ToGeneralIdRef()!]
};
await GlossariesManager.AddGlossaryItem(auditUserDetails, rootGlossaryItem, default);
var glossary = GlossariesManagerRepository.Glossaries[0];
glossary.CustomFieldDefinitions =
[
new()
{
Id = 1,
Glossary = glossary,
GlossaryId = glossary.Id,
CustomField = customField,
CustomFieldId = customField.Id
}
];
var customFieldValue = new CustomFieldValue
{
Value = "Hello World",
DisplayValue = "Hello World"
};
var childGlossaryItem = new NewGlossaryItem
{
Parent = new GeneralIdRef { Guid = rootGlossaryItem.Guid },
Name = "Test Item 1",
Guid = new Guid("4c76ee61-31d4-4a1c-a6dc-c3187fe9eb79"),
CustomFieldValues =
[
new()
{
Id = customField.ToGeneralIdRef()!,
Values = [customFieldValue]
}
]
};
var validatedFields = new List<ValidatedCustomFieldValue>
{
new()
{
CustomField = customField,
CustomFieldId = customField.Id,
DisplayValue = customFieldValue.DisplayValue,
Value = customFieldValue.Value.ToString()!
}
};
CustomFieldValidatorMock.Setup( x => x.ValidateFields(It.IsAny<AuditUserDetails>(),
It.IsAny<IEnumerable<CustomFieldValues>>(),
It.IsAny<IReadOnlyCollection<CustomField>>(),
It.IsAny<CancellationToken>()
)
)
.Returns(Task.FromResult(validatedFields.AsEnumerable()));
//Act
await GlossariesManager.AddGlossaryItem(auditUserDetails, childGlossaryItem, default);
//Assert
Assert.Multiple(() =>
{
Assert.That(GlossariesManagerRepository.Glossaries.Count, Is.EqualTo(2));
Assert.That(GlossariesManagerRepository.Glossaries[0].Name, Is.EqualTo(rootGlossaryItem.Name));
Assert.That(GlossariesManagerRepository.Glossaries[0].Guid, Is.EqualTo(rootGlossaryItem.Guid));
Assert.That(GlossariesManagerRepository.Glossaries[1].Name, Is.EqualTo(childGlossaryItem.Name));
Assert.That(GlossariesManagerRepository.Glossaries[1].Guid, Is.EqualTo(childGlossaryItem.Guid));
Assert.That(GlossariesManagerRepository.GlossaryCustomFieldValues.Count, Is.EqualTo(1));
Assert.That(GlossariesManagerRepository.GlossaryCustomFieldValues[0].DisplayValue, Is.EqualTo(customFieldValue.DisplayValue));
Assert.That(GlossariesManagerRepository.GlossaryCustomFieldValues[0].Value, Is.EqualTo(customFieldValue.Value));
});
}
[Test]
public async Task AddGlossary_WhenInsertsValueInToNonExistentCustomField_ThrowsExpectedError()
{
//Arrange
var auditUserDetails = new AuditUserDetails
{
UserDisplayName = "Testy McTester",
UserId = 666
};
var rootGlossaryItem = new NewGlossaryItem
{
Name = "test root item",
Guid = new Guid("{E94BA53F-6802-4045-BE8F-CA1047CB34F9}"),
ChildCustomFieldDefinition =
[
new()
{
Guid = new Guid("{67E85B6D-B25D-4AA7-8148-0B52BA694967}")
}
]
};
await GlossariesManager.AddGlossaryItem(auditUserDetails, rootGlossaryItem, default);
var customField = GlossariesManagerRepository.CustomFields[0];
var glossary = GlossariesManagerRepository.Glossaries[0];
glossary.CustomFieldDefinitions =
[
new()
{
Id = 1,
Glossary = glossary,
GlossaryId = glossary.Id,
CustomField = customField,
CustomFieldId = customField.Id
}
];
var childGlossaryItem = new NewGlossaryItem
{
Parent = new GeneralIdRef { Guid = rootGlossaryItem.Guid },
Name = "Test Item 1",
CustomFieldValues =
[
new()
{
Id = new GeneralIdRef { Guid = rootGlossaryItem.ChildCustomFieldDefinition[0].Guid },
Values =
[
new()
{
Value = "Hello World",
DisplayValue = "Hello World"
}
]
}
]
};
CustomFieldValidatorMock
.Setup(x => x.ValidateFields(It.IsAny<AuditUserDetails>(), It.IsAny<IEnumerable<CustomFieldValues>>(),
It.IsAny<IReadOnlyCollection<e_suite.Database.Core.Tables.CustomFields.CustomField>>(),
It.IsAny<CancellationToken>())).Throws(new NullReferenceException());
//Act and Assert
Assert.ThrowsAsync<NullReferenceException>(async () =>
await GlossariesManager.AddGlossaryItem(auditUserDetails, childGlossaryItem, default));
}
}