Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ADMINAPI-742] - Adds ods instance endpoints. #164

Open
wants to merge 16 commits into
base: main
Choose a base branch
from
Open
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
6 changes: 6 additions & 0 deletions .github/workflows/api-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ jobs:
-n 'Admin API E2E 1.0' \
-o './E2E Tests/Admin-API-Full-Collection.json'

- name: Combine Collections
run: |
postman-combine-collections -f './E2E Tests/Admin API E2E.postman_collection*.json' \
-n 'Admin API E2E 1.0' \
-o './E2E Tests/Admin-API-Full-Collection.json'

- name: Run tests
run: |
newman run './E2E Tests/Admin-API-Full-Collection.json' \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,16 @@ public void ProfileShouldBeOptional()
VendorName = "Integration Tests"
};

Save(vendor);
var odsInstance = new OdsInstance
{
Name = "test ods instance",
InstanceType = "test type",
Status = "test status",
IsExtended = true,
Version = "test version"
};

Save(vendor, odsInstance);

AddApplicationResult result = null;

Expand All @@ -65,6 +74,7 @@ public void ProfileShouldBeOptional()
ApplicationName = "Test Application",
ClaimSetName = "FakeClaimSet",
ProfileId = null,
OdsInstanceId = odsInstance.OdsInstanceId,
VendorId = vendor.VendorId,
EducationOrganizationIds = new List<int> { 12345, 67890 }
};
Expand All @@ -79,6 +89,7 @@ public void ProfileShouldBeOptional()
.Include(x => x.ApplicationEducationOrganizations)
.Include(x => x.Vendor)
.Include(x => x.ApiClients)
.Include(x => x.OdsInstance)
.Single(a => a.ApplicationId == result.ApplicationId);

persistedApplication.ClaimSetName.ShouldBe("FakeClaimSet");
Expand All @@ -89,6 +100,64 @@ public void ProfileShouldBeOptional()
persistedApplication.Vendor.VendorId.ShouldBeGreaterThan(0);
persistedApplication.Vendor.VendorId.ShouldBe(vendor.VendorId);

persistedApplication.OdsInstance.OdsInstanceId.ShouldBe(odsInstance.OdsInstanceId);

persistedApplication.ApiClients.Count.ShouldBe(1);
var apiClient = persistedApplication.ApiClients.First();
apiClient.Name.ShouldBe("Test Application");
apiClient.ApplicationEducationOrganizations.All(o => o.EducationOrganizationId == 12345 || o.EducationOrganizationId == 67890).ShouldBeTrue();
apiClient.Key.ShouldBe(result.Key);
apiClient.Secret.ShouldBe(result.Secret);
});
}

[Test]
public void OdsInstanceShouldBeOptional()
{
var vendor = new Vendor
{
VendorNamespacePrefixes = new List<VendorNamespacePrefix> { new VendorNamespacePrefix { NamespacePrefix = "http://tests.com" } },
VendorName = "Integration Tests"
};

Save(vendor);

AddApplicationResult result = null;

Transaction(usersContext =>
{
var command = new AddApplicationCommand(usersContext, new InstanceContext());
var newApplication = new TestApplication
{
ApplicationName = "Test Application",
ClaimSetName = "FakeClaimSet",
ProfileId = null,
OdsInstanceId = null,
VendorId = vendor.VendorId,
EducationOrganizationIds = new List<int> { 12345, 67890 }
};

result = command.Execute(newApplication);
});

Transaction(usersContext =>
{
var persistedApplication = usersContext.Applications
.Include(x => x.Profiles)
.Include(x => x.OdsInstance)
.Include(x => x.ApplicationEducationOrganizations)
.Include(x => x.Vendor)
.Include(x => x.ApiClients)
.Single(a => a.ApplicationId == result.ApplicationId);

persistedApplication.ClaimSetName.ShouldBe("FakeClaimSet");
persistedApplication.OdsInstance.ShouldBeNull();
persistedApplication.ApplicationEducationOrganizations.Count.ShouldBe(2);
persistedApplication.ApplicationEducationOrganizations.All(o => o.EducationOrganizationId == 12345 || o.EducationOrganizationId == 67890).ShouldBeTrue();

persistedApplication.Vendor.VendorId.ShouldBeGreaterThan(0);
persistedApplication.Vendor.VendorId.ShouldBe(vendor.VendorId);

persistedApplication.ApiClients.Count.ShouldBe(1);
var apiClient = persistedApplication.ApiClients.First();
apiClient.Name.ShouldBe("Test Application");
Expand Down Expand Up @@ -139,6 +208,7 @@ public void ShouldExecute()
ApplicationName = "Test Application",
ClaimSetName = "FakeClaimSet",
ProfileId = profile.ProfileId,
OdsInstanceId = odsInstance.OdsInstanceId,
VendorId = vendor.VendorId,
EducationOrganizationIds = new List<int> { 12345, 67890 }
};
Expand Down Expand Up @@ -183,6 +253,7 @@ private class TestApplication : IAddApplicationModel
public int VendorId { get; set; }
public string ClaimSetName { get; set; }
public int? ProfileId { get; set; }
public int? OdsInstanceId { get; set; }
public IEnumerable<int> EducationOrganizationIds { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
// SPDX-License-Identifier: Apache-2.0
// Licensed to the Ed-Fi Alliance under one or more agreements.
// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0.
// See the LICENSE and NOTICES files in the project root for more information.

using EdFi.Ods.AdminApi.Infrastructure.Database.Commands;
using Moq;
using NUnit.Framework;
using Shouldly;
using System.Linq;

namespace EdFi.Ods.AdminApi.DBTests.Database.CommandTests;

public class AddOdsInstanceCommandTests : PlatformUsersContextTestBase
{
[Test]
public void ShouldAddOdsInstance()
{
var newOdsInstance = new Mock<IAddOdsInstanceModel>();
newOdsInstance.Setup(x => x.Name).Returns("test ods instance");
newOdsInstance.Setup(x => x.InstanceType).Returns("test type");
newOdsInstance.Setup(x => x.Status).Returns("test status");
newOdsInstance.Setup(x => x.IsExtended).Returns(true);
newOdsInstance.Setup(x => x.Version).Returns("test version");

var id = 0;
Transaction(usersContext =>
{
var command = new AddOdsInstanceCommand(usersContext);

id = command.Execute(newOdsInstance.Object).OdsInstanceId;
id.ShouldBeGreaterThan(0);
});

Transaction(usersContext =>
{
var odsInstance = usersContext.OdsInstances
.Single(v => v.OdsInstanceId == id);
odsInstance.Name.ShouldBe("test ods instance");
odsInstance.InstanceType.ShouldBe("test type");
odsInstance.Status.ShouldBe("test status");
odsInstance.IsExtended.ShouldBe(true);
odsInstance.Version.ShouldBe("test version");
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// SPDX-License-Identifier: Apache-2.0
// Licensed to the Ed-Fi Alliance under one or more agreements.
// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0.
// See the LICENSE and NOTICES files in the project root for more information.

using EdFi.Ods.AdminApi.Infrastructure.Database.Commands;
using NUnit.Framework;
using Shouldly;
using System.Linq;
using EdFi.Admin.DataAccess.Models;

namespace EdFi.Ods.AdminApi.DBTests.Database.CommandTests;

[TestFixture]
public class DeleteOdsInstanceCommandTests : PlatformUsersContextTestBase
{
[Test]
public void ShouldDeleteOdsInstance()
{
var newOdsInstance = new OdsInstance()
{
Name = "test",
InstanceType = "type",
Status = "status",
Version = "version"
};
Save(newOdsInstance);
var odsInstanceId = newOdsInstance.OdsInstanceId;

Transaction(usersContext =>
{
var deleteOdsInstanceCommand = new DeleteOdsInstanceCommand(usersContext);
deleteOdsInstanceCommand.Execute(odsInstanceId);
});

Transaction(usersContext => usersContext.OdsInstances.Where(v => v.OdsInstanceId == odsInstanceId).ToArray()).ShouldBeEmpty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ private class TestEditApplicationModel : IEditApplicationModel
public int VendorId { get; set; }
public string ClaimSetName { get; set; }
public int? ProfileId { get; set; }
public int? OdsInstanceId { get; set; }
public IEnumerable<int> EducationOrganizationIds { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// SPDX-License-Identifier: Apache-2.0
// Licensed to the Ed-Fi Alliance under one or more agreements.
// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0.
// See the LICENSE and NOTICES files in the project root for more information.

using Moq;
using NUnit.Framework;
using Shouldly;
using System.Linq;
using EdFi.Admin.DataAccess.Models;
using EdFi.Ods.AdminApi.Infrastructure.Database.Queries;

namespace EdFi.Ods.AdminApi.DBTests.Database.CommandTests;

[TestFixture]
internal class EditOdsInstanceCommandTests : PlatformUsersContextTestBase
{
private int _odsInstanceId;

[SetUp]
public void Init()
{
var originalOdsInstance = new OdsInstance
{
Name = "old ods instance name",
InstanceType = "old type",
Status = "old status",
IsExtended = false,
Version = "old version",
};

Save(originalOdsInstance);
_odsInstanceId = originalOdsInstance.OdsInstanceId;
}

[Test]
public void ShouldEditVendor()
{
var newOdsInstanceData = new Mock<IEditOdsInstanceModel>();
newOdsInstanceData.Setup(v => v.OdsInstanceId).Returns(_odsInstanceId);
newOdsInstanceData.Setup(v => v.Name).Returns("new ods instance name");
newOdsInstanceData.Setup(v => v.InstanceType).Returns("new type");
newOdsInstanceData.Setup(v => v.Status).Returns("new status");
newOdsInstanceData.Setup(v => v.IsExtended).Returns(true);
newOdsInstanceData.Setup(v => v.Version).Returns("new version");

Transaction(usersContext =>
{
var editOdsInstanceCommand = new EditOdsInstanceCommand(usersContext);
editOdsInstanceCommand.Execute(newOdsInstanceData.Object);
});

Transaction(usersContext =>
{
var changedOdsInstance = usersContext.OdsInstances
.Single(v => v.OdsInstanceId == _odsInstanceId);
changedOdsInstance.Name.ShouldBe("new ods instance name");
changedOdsInstance.InstanceType.ShouldBe("new type");
changedOdsInstance.Status.ShouldBe("new status");
changedOdsInstance.IsExtended.ShouldBe(true);
changedOdsInstance.Version.ShouldBe("new version");
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
// SPDX-License-Identifier: Apache-2.0
// Licensed to the Ed-Fi Alliance under one or more agreements.
// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0.
// See the LICENSE and NOTICES files in the project root for more information.

using EdFi.Ods.AdminApi.Infrastructure.Database.Queries;
using NUnit.Framework;
using Shouldly;
using System.Linq;
using EdFi.Admin.DataAccess.Models;
using EdFi.Ods.AdminApi.Infrastructure;

namespace EdFi.Ods.AdminApi.DBTests.Database.QueryTests;

[TestFixture]
public class GetOdsInstancesQueryTests : PlatformUsersContextTestBase
{
[Test]
public void Should_retrieve_ods_instances()
{
var newOdsInstance = new OdsInstance
{
Name = "test ods instance",
InstanceType = "test ods instance type",
Status = "OK",
Version = "1.0.0",
};

Save(newOdsInstance);

Transaction(usersContext =>
{
var command = new GetOdsInstancesQuery(usersContext, Testing.GetAppSettings());
var allOdsInstances = command.Execute();

allOdsInstances.ShouldNotBeEmpty();

var odsInstance = allOdsInstances.Single(v => v.OdsInstanceId == newOdsInstance.OdsInstanceId);
odsInstance.Name.ShouldBe("test ods instance");
odsInstance.InstanceType.ShouldBe("test ods instance type");
});
}

[Test]
public void Should_retrieve_ods_instances_with_offset_and_limit()
{
var odsInstances = new OdsInstance[5];

for (var odsInstanceIndex = 0; odsInstanceIndex < 5; odsInstanceIndex++)
{
odsInstances[odsInstanceIndex] = new OdsInstance
{
Name = $"test ods instance {odsInstanceIndex + 1}",
InstanceType = "test ods instance type",
Status = "OK",
Version = "1.0.0",
};
}

Save(odsInstances);

Transaction(usersContext =>
{
var command = new GetOdsInstancesQuery(usersContext, Testing.GetAppSettings());
var commonQueryParams = new CommonQueryParams(0, 2);

var odsInstancesAfterOffset = command.Execute(commonQueryParams);

odsInstancesAfterOffset.ShouldNotBeEmpty();
odsInstancesAfterOffset.Count.ShouldBe(2);

odsInstancesAfterOffset.ShouldContain(v => v.Name == "test ods instance 1");
odsInstancesAfterOffset.ShouldContain(v => v.Name == "test ods instance 2");

commonQueryParams.Offset = 2;

odsInstancesAfterOffset = command.Execute(commonQueryParams);

odsInstancesAfterOffset.ShouldNotBeEmpty();
odsInstancesAfterOffset.Count.ShouldBe(2);

odsInstancesAfterOffset.ShouldContain(v => v.Name == "test ods instance 3");
odsInstancesAfterOffset.ShouldContain(v => v.Name == "test ods instance 4");
commonQueryParams.Offset = 4;

odsInstancesAfterOffset = command.Execute(commonQueryParams);

odsInstancesAfterOffset.ShouldNotBeEmpty();
odsInstancesAfterOffset.Count.ShouldBe(1);

odsInstancesAfterOffset.ShouldContain(v => v.Name == "test ods instance 5");
});
}
}
4 changes: 2 additions & 2 deletions Application/EdFi.Ods.AdminApi.DBTests/Testing.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ public static IConfiguration Configuration()

public static string SecurityV53ConnectionString { get { return Configuration().GetConnectionString("SecurityV53"); } }

public static int DefaultPageSizeOffset => (int)Configuration().GetValue(typeof(int), "DefaultPageSizeOffset");
public static int DefaultPageSizeOffset => (int)Configuration().GetValue(typeof(int), "AppSettings:DefaultPageSizeOffset");

public static int DefaultPageSizeLimit => (int)Configuration().GetValue(typeof(int), "DefaultPageSizeLimit");
public static int DefaultPageSizeLimit => (int)Configuration().GetValue(typeof(int), "AppSettings:DefaultPageSizeLimit");

public static DbContextOptions GetDbContextOptions(string connectionString)
{
Expand Down
Loading
Loading