Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/Exceptionless.Core/Repositories/OrganizationRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,13 @@ public Task<FindResults<Organization>> GetByCriteriaAsync(string? criteria, Comm
var query = new RepositoryQuery<Organization>();

if (!String.IsNullOrWhiteSpace(criteria))
{
string normalizedCriteria = criteria.Trim();
query.FieldOr(g => g
.FieldEquals(o => o.Id, criteria)
.FieldEquals(o => o.Name, criteria));
.FieldEquals(o => o.Id, normalizedCriteria)
.FieldEquals(o => o.Name, normalizedCriteria)
.FieldContains(o => o.Name, normalizedCriteria));
}

if (paid.HasValue)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,25 @@ public async Task GetForAdminsAsync_AsGlobalAdmin_ReturnsOrganizations()
Assert.Contains(organizations, organization => organization.Id == expectedOrganizationId);
}

[Theory]
[InlineData("NSW")]
[InlineData("nsw")]
[InlineData(" NSW ")]
public async Task GetForAdminsAsync_WithNameCriteria_ReturnsMatchingOrganization(string criteria)
{
var organization = new Organization { Name = "NSW Planning Team", PlanId = _plans.FreePlan.Id };
await _organizationRepository.AddAsync(organization, options => options.ImmediateConsistency());

var organizations = await SendRequestAsAsync<IReadOnlyCollection<ViewOrganization>>(request => request
.AsGlobalAdminUser()
.AppendPaths("admin", "organizations")
.QueryString("criteria", criteria)
.StatusCodeShouldBeOk());

Assert.NotNull(organizations);
Assert.Equal(organization.Id, Assert.Single(organizations).Id);
}

[Fact]
public async Task GetIconAsync_WithExistingIcon_ReturnsImage()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,36 +64,80 @@ public async Task CanAddAndGetByCachedAsync()
Assert.Equal(0, _cache.Count);
}

[Fact]
public async Task GetByCriteria_SearchById_ReturnsMatchingOrganization()
[Theory]
[InlineData(false)]
[InlineData(true)]
public async Task GetByCriteriaAsync_SearchById_ReturnsMatchingOrganization(bool padCriteria)
{
// Arrange
var organization = new Organization { Name = "Criteria Test Organization", PlanId = _plans.FreePlan.Id };
await _repository.AddAsync(organization, o => o.ImmediateConsistency());

// Act
var results = await _repository.GetByCriteriaAsync(organization.Id,
string criteria = padCriteria ? $" {organization.Id} " : organization.Id;
var results = await _repository.GetByCriteriaAsync(criteria,
o => o.PageLimit(10), OrganizationSortBy.Newest);

// Assert
Assert.Single(results.Documents);
Assert.Equal(organization.Id, results.Documents.First().Id);
}

[Fact]
public async Task GetByCriteria_SearchByName_ReturnsMatchingOrganization()
[Theory]
[InlineData("NSW Planning Team")]
[InlineData("NSW")]
[InlineData("nsw")]
[InlineData("planning")]
[InlineData("NSW planning")]
[InlineData(" NSW ")]
public async Task GetByCriteriaAsync_SearchByName_ReturnsMatchingOrganization(string criteria)
{
// Arrange
var organization = new Organization { Name = "Unique Search Name", PlanId = _plans.FreePlan.Id };
await _repository.AddAsync(organization, o => o.ImmediateConsistency());
var organization = new Organization { Name = "NSW Planning Team", PlanId = _plans.FreePlan.Id };
var unrelatedOrganization = new Organization { Name = "Unrelated Company", PlanId = _plans.FreePlan.Id };
await _repository.AddAsync([organization, unrelatedOrganization], o => o.ImmediateConsistency());

// Act
var results = await _repository.GetByCriteriaAsync("Unique Search Name",
var results = await _repository.GetByCriteriaAsync(criteria,
o => o.PageLimit(10), OrganizationSortBy.Newest);

// Assert
Assert.Single(results.Documents);
Assert.Equal("Unique Search Name", results.Documents.First().Name);
Assert.Equal(organization.Id, results.Documents.First().Id);
}

[Fact]
public async Task GetByCriteriaAsync_WithSymbolOnlyName_ReturnsMatchingOrganization()
{
var organization = new Organization { Name = "+++", PlanId = _plans.FreePlan.Id };
await _repository.AddAsync(organization, options => options.ImmediateConsistency());

var results = await _repository.GetByCriteriaAsync(organization.Name,
options => options.PageLimit(10), OrganizationSortBy.Newest);

Assert.Equal(organization.Id, Assert.Single(results.Documents).Id);
}

[Fact]
public async Task GetByCriteriaAsync_WithNameAndPlanAndStatusFilters_ReturnsMatchingOrganization()
{
var organization = new Organization
{
Name = "NSW Planning Team",
PlanId = _plans.SmallPlan.Id,
BillingStatus = BillingStatus.Active
};
await _repository.AddAsync([
organization,
new Organization { Name = "NSW Free", PlanId = _plans.FreePlan.Id, BillingStatus = BillingStatus.Active },
new Organization { Name = "NSW Past Due", PlanId = _plans.SmallPlan.Id, BillingStatus = BillingStatus.PastDue },
new Organization { Name = "Unrelated Company", PlanId = _plans.SmallPlan.Id, BillingStatus = BillingStatus.Active }
], options => options.ImmediateConsistency());

var results = await _repository.GetByCriteriaAsync("nsw", options => options.PageLimit(10),
OrganizationSortBy.Newest, paid: true, suspended: false);

Assert.Equal(organization.Id, Assert.Single(results.Documents).Id);
}

[Fact]
Expand Down
Loading