Skip to content

Commit

Permalink
Refact methods, add tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
bloglan committed Jan 20, 2025
1 parent 8587f8c commit 0759513
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,14 @@ public async Task<IActionResult> OnPostAsync()
Organization? org = await manager.FindByIdAsync(Anchor);
if (org == null)
return NotFound();

OrganizationOperationResult result = await manager.ChangeNameAsync(org, Input.NewName,
DateOnly.FromDateTime(Input.ChangeDate));
OrganizationOperationResult result;
if (Input.RecordUsedName)
result = await manager.RenameAsync(org, Input.NewName, DateOnly.FromDateTime(Input.ChangeDate));
else
{
org.Name = Input.NewName;
result = await manager.UpdateAsync(org);
}
if (!result.Succeeded)
{
foreach (string error in result.Errors) ModelState.AddModelError("", error);
Expand All @@ -60,8 +65,5 @@ public class InputModel

[Display(Name = "Record used name")]
public bool RecordUsedName { get; set; } = true;

[Display(Name = "Apply changes when name duplicated")]
public bool ApplyChangeWhenNameDuplicated { get; set; } = false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

<ItemGroup>
<ProjectReference Include="..\AlphaIdPlatform\AlphaIdPlatform.csproj" />
<ProjectReference Include="..\IntegrationTestUtilities\IntegrationTestUtilities.csproj" />
</ItemGroup>

</Project>
57 changes: 39 additions & 18 deletions src/AlphaID/AlphaIdPlatform.Tests/OrganizationManagerTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using AlphaIdPlatform.Subjects;
using IntegrationTestUtilities;

namespace AlphaIdPlatform.Tests;
public class OrganizationManagerTest(ServiceProviderFixture serviceProviderFixture) : IClassFixture<ServiceProviderFixture>
Expand All @@ -8,32 +9,21 @@ public async Task CreateOrganization()
{
using var scope = serviceProviderFixture.ServiceScopeFactory.CreateScope();
var organizationManager = scope.ServiceProvider.GetRequiredService<OrganizationManager>();
var organization = new Organization
{
Name = "Test Organization",
Description = "Test Description"
};
organizationManager.TimeProvider = new FrozenTimeProvider();
var organization = new Organization { Name = "Test Organization" };
var result = await organizationManager.CreateAsync(organization);
Assert.True(result.Succeeded);
Assert.Equal(organizationManager.TimeProvider.GetUtcNow(), organization.WhenCreated);
Assert.Equal(organizationManager.TimeProvider.GetUtcNow(), organization.WhenChanged);
}

[Fact]
public async Task CreateAnotherOrganizationWithSameName()
{
using var scope = serviceProviderFixture.ServiceScopeFactory.CreateScope();
var organizationManager = scope.ServiceProvider.GetRequiredService<OrganizationManager>();
var organization = new Organization
{
Name = "Test Organization",
Description = "Test Description"
};
_ = await organizationManager.CreateAsync(organization);
var anotherOrganization = new Organization
{
Name = "Test Organization",
Description = "Another Test Description"
};
var result = await organizationManager.CreateAsync(anotherOrganization);
await organizationManager.CreateAsync(new Organization { Name = "Test Organization" });
var result = await organizationManager.CreateAsync(new Organization { Name = "Test Organization" });
Assert.False(result.Succeeded);
}

Expand All @@ -44,9 +34,40 @@ public async Task FindOrganizationsViaNameAndUsedName()
var organizationManager = scope.ServiceProvider.GetRequiredService<OrganizationManager>();
var orgA = new Organization { Name = "OrgA" };
await organizationManager.CreateAsync(orgA);
await organizationManager.ChangeNameAsync(orgA, "OrgD", DateOnly.FromDateTime(DateTime.Now));
await organizationManager.RenameAsync(orgA, "OrgD", DateOnly.FromDateTime(DateTime.Now));
var found = organizationManager.FindByName("OrgA");
Assert.Contains(found, o => o.Name == "OrgD");
Assert.Contains(orgA.UsedNames, u => u.Name == "OrgA");
}

[Fact]
public async Task RenameOrganizationToCurrentSameName()
{
using var scope = serviceProviderFixture.ServiceScopeFactory.CreateScope();
var organizationManager = scope.ServiceProvider.GetRequiredService<OrganizationManager>();
var orgA = new Organization { Name = "OrgA" };
await organizationManager.CreateAsync(orgA);
await organizationManager.CreateAsync(new Organization { Name = "OrgB" });
var result = await organizationManager.RenameAsync(orgA, "OrgB");
Assert.False(result.Succeeded);
}

[Fact]
public async Task UpdateOrganization()
{
using var scope = serviceProviderFixture.ServiceScopeFactory.CreateScope();
var organizationManager = scope.ServiceProvider.GetRequiredService<OrganizationManager>();
//Set time frozen to min value.
organizationManager.TimeProvider = new FrozenTimeProvider(DateTimeOffset.MinValue);
var organization = new Organization { Name = "Test Organization" };
await organizationManager.CreateAsync(organization);

//Set time frozen to now.
organizationManager.TimeProvider = new FrozenTimeProvider();
organization.Domicile = "Test Domicile";
var result = await organizationManager.UpdateAsync(organization);
Assert.True(result.Succeeded);
Assert.Equal(DateTimeOffset.MinValue, organization.WhenCreated);
Assert.Equal(organizationManager.TimeProvider.GetUtcNow(), organization.WhenChanged);
}
}
23 changes: 7 additions & 16 deletions src/AlphaID/AlphaIdPlatform/Subjects/OrganizationManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ public async Task<OrganizationOperationResult> CreateAsync(Organization org)
{
if (Store.Organizations.Any(p => p.Name == org.Name))
return OrganizationOperationResult.Failed("名称重复");
DateTimeOffset utcNow = TimeProvider.GetUtcNow();
org.WhenCreated = utcNow;
org.WhenChanged = utcNow;
org.WhenCreated = TimeProvider.GetUtcNow();
org.WhenChanged = org.WhenCreated;
return await Store.CreateAsync(org);
}

Expand Down Expand Up @@ -94,29 +93,21 @@ public async Task<OrganizationOperationResult> UpdateAsync(Organization org)
/// <param name="org">要更改名称的组织。</param>
/// <param name="newName">新名称。</param>
/// <param name="changeDate">更改时间。</param>
///
///
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<OrganizationOperationResult> ChangeNameAsync(Organization org,
string newName,
DateOnly changeDate)
public async Task<OrganizationOperationResult> RenameAsync(Organization org, string newName, DateOnly? changeDate = null)
{
newName = newName.Trim().Trim('\r', '\n');
if (newName == org.Name)
return OrganizationOperationResult.Failed("名称相同");

bool nameExists = Store.Organizations.Any(p => p.Name == newName);
if (nameExists)
return OrganizationOperationResult.Failed("存在重复名称");
return OrganizationOperationResult.Failed("名称相同。");

org.UsedNames.Add(new OrganizationUsedName
{
Name = org.Name,
DeprecateTime = changeDate
//使用本地时间以避免早上8点前日期被减一天。
DeprecateTime = changeDate ?? DateOnly.FromDateTime(TimeProvider.GetLocalNow().DateTime),
});
org.Name = newName;
await UpdateAsync(org);
return OrganizationOperationResult.Success;
return await UpdateAsync(org);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public async Task<IActionResult> OnPostAsync(string anchor)
if (!ModelState.IsValid)
return Page();

Result = await manager.ChangeNameAsync(organization, Name, DateOnly.FromDateTime(DateTime.UtcNow));
Result = await manager.RenameAsync(organization, Name);
if (!Result.Succeeded)
return Page();

Expand Down

0 comments on commit 0759513

Please sign in to comment.