From 3b1708ce43b00ee2ff64c237cb53af7f678e65cf Mon Sep 17 00:00:00 2001 From: Matthew Jackson Date: Fri, 13 Sep 2024 11:07:10 -0500 Subject: [PATCH] [ODS-4799] Introduce resource POST/Retry order in dependency endpoint (#1128) --- ...onResourceGraphAuthorizationTransformer.cs | 100 ++++++++--- .../Extensions/ResourceExtensions.cs | 2 +- .../Graphs/IResourceLoadGraphFactory.cs | 2 +- .../Models/Graphs/ResourceLoadGraphFactory.cs | 26 ++- .../Models/Resource/Resource.cs | 4 + .../AggregateDependencyController.cs | 23 ++- ...regateDependencyControllerGraphMLTests.cs} | 12 +- .../AggregateDependencyControllerJSONTests.cs | 160 ++++++++++++++++++ ...ould_Get_Dependencies_GraphML.approved.txt | 8 + ...Tests.Should_Get_Dependencies.approved.txt | 96 +++++++++++ ...ould_Get_Dependencies_GraphML.approved.txt | 50 ++++++ .../AggregateDependencyControllerTests.cs | 0 12 files changed, 442 insertions(+), 41 deletions(-) rename Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/{AggregateDependencyControllerTests.cs => AggregateDependencyControllerGraphMLTests.cs} (96%) create mode 100644 Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerJSONTests.cs rename tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/{5.0.0 => 5.1.0}/AggregateDependencyControllerTests.Should_Get_Dependencies.approved.txt (96%) rename tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/{5.0.0 => 5.1.0}/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt (96%) rename tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/{5.0.0 => 5.1.0}/AggregateDependencyControllerTests.cs (100%) diff --git a/Application/EdFi.Ods.Api/Security/Authorization/PersonResourceGraphAuthorizationTransformer.cs b/Application/EdFi.Ods.Api/Security/Authorization/PersonResourceGraphAuthorizationTransformer.cs index 5961a11ddb..792407dba5 100644 --- a/Application/EdFi.Ods.Api/Security/Authorization/PersonResourceGraphAuthorizationTransformer.cs +++ b/Application/EdFi.Ods.Api/Security/Authorization/PersonResourceGraphAuthorizationTransformer.cs @@ -6,6 +6,7 @@ using System.Linq; using EdFi.Ods.Common.Conventions; using EdFi.Ods.Common.Exceptions; +using EdFi.Ods.Common.Extensions; using EdFi.Ods.Common.Models.Domain; using EdFi.Ods.Common.Models.Graphs; using EdFi.Ods.Common.Models.Resource; @@ -17,9 +18,10 @@ namespace EdFi.Ods.Api.Security.Authorization { public class PersonResourceLoadGraphTransformer : IResourceLoadGraphTransformer { - private const string TransformationErrorText = "Dependency graph transformation for security considerations failed. See log for more details."; + private const string TransformationErrorText = + "Dependency graph transformation for security considerations failed. See log for more details."; private readonly ILog _logger = LogManager.GetLogger(typeof(PersonResourceLoadGraphTransformer)); - + public void Transform(BidirectionalGraph resourceGraph) { ApplyStudentTransformation(resourceGraph); @@ -30,16 +32,19 @@ public void Transform(BidirectionalGraph resource private void ApplyStaffTransformation(BidirectionalGraph resourceGraph) { var resources = resourceGraph.Vertices.ToList(); - - var staffResource = resources.FirstOrDefault(x => x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Staff")); + + var staffResource = + resources.FirstOrDefault(x => x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Staff")); var staffEdOrgEmployAssoc = resources.FirstOrDefault( - x => x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "StaffEducationOrganizationEmploymentAssociation")); + x => x.FullName == new FullName( + EdFiConventions.PhysicalSchemaName, "StaffEducationOrganizationEmploymentAssociation")); var staffEdOrgAssignAssoc = resources.FirstOrDefault( - x => x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "StaffEducationOrganizationAssignmentAssociation")); + x => x.FullName == new FullName( + EdFiConventions.PhysicalSchemaName, "StaffEducationOrganizationAssignmentAssociation")); // No staff entity in the graph, nothing to do. if (staffResource == null) @@ -49,7 +54,8 @@ private void ApplyStaffTransformation(BidirectionalGraph e.Target != staffEdOrgEmployAssoc && e.Target != staffEdOrgAssignAssoc) .ToList(); - + // Add dependency on primaryRelationship path foreach (var directStaffDependency in directStaffDependencies) { // Re-point the edge to the primary relationships resourceGraph.RemoveEdge(directStaffDependency); - - resourceGraph.AddEdge(new AssociationViewEdge(staffEdOrgAssignAssoc, directStaffDependency.Target, directStaffDependency.AssociationView)); - resourceGraph.AddEdge(new AssociationViewEdge(staffEdOrgEmployAssoc, directStaffDependency.Target, directStaffDependency.AssociationView)); + + resourceGraph.AddEdge( + new AssociationViewEdge( + staffEdOrgAssignAssoc, directStaffDependency.Target, directStaffDependency.AssociationView)); + + resourceGraph.AddEdge( + new AssociationViewEdge( + staffEdOrgEmployAssoc, directStaffDependency.Target, directStaffDependency.AssociationView)); } + + // Add StaffEducationOrganizationAssignmentAssociations/#POSTRetry node for Staff resource + AddPostRetryVertexForResource(resourceGraph, staffEdOrgAssignAssoc, staffResource); + + // Add StaffEducationOrganizationEmploymentAssociations/#POSTRetry node for Staff resource + AddPostRetryVertexForResource(resourceGraph, staffEdOrgEmployAssoc, staffResource); } private static void ApplyStudentTransformation(BidirectionalGraph resourceGraph) { var resources = resourceGraph.Vertices.ToList(); - var studentResource = resources.FirstOrDefault(x => x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Student")); - var studentSchoolAssociationResource = resources.FirstOrDefault(x => x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "StudentSchoolAssociation")); + var studentResource = + resources.FirstOrDefault(x => x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Student")); + + var studentSchoolAssociationResource = resources.FirstOrDefault( + x => x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "StudentSchoolAssociation")); // No student entity in the graph, nothing to do. if (studentResource == null) @@ -108,18 +128,26 @@ private static void ApplyStudentTransformation(BidirectionalGraph resourceGraph) { var resources = resourceGraph.Vertices.ToList(); - var contactResource = resources.FirstOrDefault(x => - x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Contact") - || x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Parent")); - + var contactResource = resources.FirstOrDefault( + x => + x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Contact") + || x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Parent")); + // No entity named Parent or Contact in the graph, nothing to do. if (contactResource == null) { @@ -135,10 +163,12 @@ private void ApplyContactTransformation(BidirectionalGraph x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, contactStudentAssociationName)); - + if (studentContactAssociationResource == null) { - string message = $"Unable to transform resource load graph as {contactStudentAssociationName} was not found in the graph."; + string message = + $"Unable to transform resource load graph as {contactStudentAssociationName} was not found in the graph."; + _logger.Error(message); throw new SecurityAuthorizationException( @@ -157,12 +187,21 @@ private void ApplyContactTransformation(BidirectionalGraph resourceGraph, Resource postRetrySource, + Resource postRetryTarget) + { + var postRetryVertex = new Resource(postRetrySource.Name); + postRetryVertex.IsPostRetryResource = true; + + postRetryVertex.PostRetryOriginalSchemaUriSegment = + postRetrySource.SchemaUriSegment(); + + resourceGraph.AddVertex(postRetryVertex); + resourceGraph.AddEdge(new AssociationViewEdge(postRetryVertex, postRetryTarget, null)); + } } -} +} \ No newline at end of file diff --git a/Application/EdFi.Ods.Common/Extensions/ResourceExtensions.cs b/Application/EdFi.Ods.Common/Extensions/ResourceExtensions.cs index 15787120d1..5f03e1a6e9 100644 --- a/Application/EdFi.Ods.Common/Extensions/ResourceExtensions.cs +++ b/Application/EdFi.Ods.Common/Extensions/ResourceExtensions.cs @@ -187,7 +187,7 @@ public static bool IsDerivedFrom( public static string SchemaUriSegment(this Resource resource) => resource .ResourceModel?.SchemaNameMapProvider ?.GetSchemaMapByPhysicalName(resource.FullName.Schema) - .UriSegment; + .UriSegment ?? resource.PostRetryOriginalSchemaUriSegment; /// /// Check if resource is abstract. diff --git a/Application/EdFi.Ods.Common/Models/Graphs/IResourceLoadGraphFactory.cs b/Application/EdFi.Ods.Common/Models/Graphs/IResourceLoadGraphFactory.cs index e19be66636..1d9c94cd8b 100644 --- a/Application/EdFi.Ods.Common/Models/Graphs/IResourceLoadGraphFactory.cs +++ b/Application/EdFi.Ods.Common/Models/Graphs/IResourceLoadGraphFactory.cs @@ -16,6 +16,6 @@ public interface IResourceLoadGraphFactory /// Creates a new graph containing the Ed-Fi model's resources, performing any defined graph transformations. /// /// A new graph instance. - BidirectionalGraph CreateResourceLoadGraph(); + BidirectionalGraph CreateResourceLoadGraph(bool includePostRetryNodes = true); } } diff --git a/Application/EdFi.Ods.Common/Models/Graphs/ResourceLoadGraphFactory.cs b/Application/EdFi.Ods.Common/Models/Graphs/ResourceLoadGraphFactory.cs index ef28367eb6..1c4b8fb177 100644 --- a/Application/EdFi.Ods.Common/Models/Graphs/ResourceLoadGraphFactory.cs +++ b/Application/EdFi.Ods.Common/Models/Graphs/ResourceLoadGraphFactory.cs @@ -25,7 +25,7 @@ public ResourceLoadGraphFactory(IResourceModelProvider resourceModelProvider, _graphTransformers = graphTransformers; } - public BidirectionalGraph CreateResourceLoadGraph() + public BidirectionalGraph CreateResourceLoadGraph(bool includePostRetryNodes) { var resourceModel = _resourceModelProvider.GetResourceModel(); @@ -71,9 +71,29 @@ public ResourceLoadGraphFactory(IResourceModelProvider resourceModelProvider, } } - resourceGraph.BreakCycles(edge => edge.AssociationView.IsSoftDependency); - + resourceGraph.BreakCycles(edge => edge.AssociationView?.IsSoftDependency ?? false); + + if (!includePostRetryNodes) + { + RemovePostRetryNodes(); + } + return resourceGraph; + + void RemovePostRetryNodes() + { + var postRetryVertices = resourceGraph.Vertices.Where(v => v.IsPostRetryResource).ToList(); + + foreach(var postRetryVertex in postRetryVertices) + { + var outEdges = resourceGraph.OutEdges(postRetryVertex).ToList(); + foreach (var edge in outEdges) + { + resourceGraph.RemoveEdge(edge); + } + resourceGraph.RemoveVertex(postRetryVertex); + } + } } } diff --git a/Application/EdFi.Ods.Common/Models/Resource/Resource.cs b/Application/EdFi.Ods.Common/Models/Resource/Resource.cs index 7dadf8b15a..84defb2c53 100644 --- a/Application/EdFi.Ods.Common/Models/Resource/Resource.cs +++ b/Application/EdFi.Ods.Common/Models/Resource/Resource.cs @@ -74,6 +74,10 @@ public Resource(string name) } public bool IsEdFiCore { get; set; } + + public bool IsPostRetryResource { get; set; } + + public string PostRetryOriginalSchemaUriSegment { get; set; } /// /// Gets the root class for the current resource. diff --git a/Application/EdFi.Ods.Features/Controllers/AggregateDependencyController.cs b/Application/EdFi.Ods.Features/Controllers/AggregateDependencyController.cs index 4f89657766..87a301b302 100644 --- a/Application/EdFi.Ods.Features/Controllers/AggregateDependencyController.cs +++ b/Application/EdFi.Ods.Features/Controllers/AggregateDependencyController.cs @@ -36,6 +36,8 @@ public class AggregateDependencyController : ControllerBase private readonly ILog _logger = LogManager.GetLogger(typeof(AggregateDependencyController)); private readonly bool _isEnabled; + + private const string PostRetrySuffix = "/#POSTRetry"; public AggregateDependencyController( ApiSettings apiSettings, @@ -57,12 +59,16 @@ public IActionResult Get() try { - var groupedLoadOrder = GetGroupedLoadOrder(_resourceLoadGraphFactory.CreateResourceLoadGraph()).ToList(); + if(Request.GetTypedHeaders().Accept != null + && Request.GetTypedHeaders().Accept.Any(a => + a.MediaType.Value.EqualsIgnoreCase(CustomMediaContentTypes.GraphML))) + { + return Ok(CreateGraphML(_resourceLoadGraphFactory.CreateResourceLoadGraph(true))); + } + + var groupedLoadOrder = GetGroupedLoadOrder(_resourceLoadGraphFactory.CreateResourceLoadGraph(false)).ToList(); ModifyLoadOrderForAuthorizationConcerns(groupedLoadOrder); - return Request.GetTypedHeaders().Accept != null - && Request.GetTypedHeaders().Accept.Any(a => a.MediaType.Value.EqualsIgnoreCase(CustomMediaContentTypes.GraphML)) - ? Ok(CreateGraphML(_resourceLoadGraphFactory.CreateResourceLoadGraph())) - : Ok(groupedLoadOrder); + return Ok(groupedLoadOrder); } catch (NonAcyclicGraphException e) { @@ -135,7 +141,12 @@ List GetLoadableResources() } private static string GetNodeId(Resource resource) - => $"/{resource.SchemaUriSegment()}/{resource.PluralName.ToCamelCase()}"; + { + var suffixToApply = resource.IsPostRetryResource + ? PostRetrySuffix + : string.Empty; + return $"/{resource.SchemaUriSegment() ?? resource.PostRetryOriginalSchemaUriSegment}/{resource.PluralName.ToCamelCase()}{suffixToApply}"; + } private static void ModifyLoadOrderForAuthorizationConcerns(IList resources) { diff --git a/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerTests.cs b/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerGraphMLTests.cs similarity index 96% rename from Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerTests.cs rename to Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerGraphMLTests.cs index 4f620288ea..d6cddff288 100644 --- a/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerTests.cs +++ b/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerGraphMLTests.cs @@ -24,7 +24,7 @@ namespace EdFi.Ods.Tests.EdFi.Ods.Features.Controllers { [TestFixture] - public class AggregateDependencyControllerTests + public class AggregateDependencyControllerGraphMLTests { public class When_getting_the_dependencies_for_loading_data : TestFixtureBase { @@ -40,10 +40,10 @@ protected override void Arrange() var graph = new BidirectionalGraph(); graph.AddVertex(new Resource("Test")); - A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph()) + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph(true)) .Returns(graph); - _controller = CreateController(_resourceLoadGraphFactory); + _controller = CreateController(_resourceLoadGraphFactory, true); } protected override void Act() @@ -55,7 +55,7 @@ protected override void Act() [Test] public void Should_get_the_resource_model_for_building_the_output() { - A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph()) + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph(true)) .MustHaveHappened(); } @@ -88,7 +88,7 @@ protected override void Arrange() var graph = new BidirectionalGraph(); graph.AddVertex(new Resource("Test")); - A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph()) + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph(true)) .Returns(graph); _controller = CreateController(_resourceLoadGraphFactory, true); @@ -104,7 +104,7 @@ protected override void Act() [Test] public void Should_call_the_resource_model_provider_to_get_the_model_for_building_the_output() { - A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph()).MustHaveHappened(); + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph(true)).MustHaveHappened(); } [Test] diff --git a/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerJSONTests.cs b/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerJSONTests.cs new file mode 100644 index 0000000000..d2e2c589a0 --- /dev/null +++ b/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerJSONTests.cs @@ -0,0 +1,160 @@ +// 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 System.Collections; +using System.IO; +using System.Xml; +using System.Xml.Serialization; +using EdFi.Ods.Api.Constants; +using EdFi.Ods.Api.Models.GraphML; +using EdFi.Ods.Common.Configuration; +using EdFi.Ods.Common.Logging; +using EdFi.Ods.Common.Models.Graphs; +using EdFi.Ods.Common.Models.Resource; +using EdFi.Ods.Features.Controllers; +using EdFi.TestFixture; +using FakeItEasy; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; +using NUnit.Framework; +using QuickGraph; +using Assert = NUnit.Framework.Legacy.ClassicAssert; + +namespace EdFi.Ods.Tests.EdFi.Ods.Features.Controllers +{ + [TestFixture] + public class AggregateDependencyControllerJSONTests + { + public class When_getting_the_dependencies_for_loading_data : TestFixtureBase + { + private IResourceLoadGraphFactory _resourceLoadGraphFactory; + private AggregateDependencyController _controller; + private IActionResult _actionResult; + private OkObjectResult objectResult; + + protected override void Arrange() + { + _resourceLoadGraphFactory = Stub(); + + var graph = new BidirectionalGraph(); + graph.AddVertex(new Resource("Test")); + + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph(false)) + .Returns(graph); + + _controller = CreateController(_resourceLoadGraphFactory); + } + + protected override void Act() + { + _actionResult = _controller.Get(); + objectResult = (OkObjectResult)_actionResult; + } + + [Test] + public void Should_get_the_resource_model_for_building_the_output() + { + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph(false)) + .MustHaveHappened(); + } + + [Test] + public void Should_have_content_type_of_AggregateLoadOrder() + { + var oo = objectResult.Value; + Assert.That(objectResult.Value, Is.Not.Null); + //Not executing method in aggregatecontroller even the value is false + //Assert.IsTrue(false); + } + + [Test] + public void Should_return_an_ok_status() + { + Assert.AreEqual(objectResult.StatusCode, 200); + } + } + + public class When_getting_the_dependency_graph : TestFixtureBase + { + private IResourceLoadGraphFactory _resourceLoadGraphFactory; + private AggregateDependencyController _controller; + private IActionResult _actionResult; + private OkObjectResult objectResult; + + protected override void Arrange() + { + _resourceLoadGraphFactory = Stub(); + + var graph = new BidirectionalGraph(); + graph.AddVertex(new Resource("Test")); + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph(false)) + .Returns(graph); + + _controller = CreateController(_resourceLoadGraphFactory, false); + } + + protected override void Act() + { + _actionResult = _controller.Get(); + + objectResult = (OkObjectResult)_actionResult; + } + + [Test] + public void Should_call_the_resource_model_provider_to_get_the_model_for_building_the_output() + { + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph(false)).MustHaveHappened(); + } + + [Test] + public void Should_have_result_content_with_one_resource() + { + Assert.That((objectResult.Value as ICollection)?.Count == 1); + } + + [Test] + public void Should_return_an_ok_status() + { + Assert.AreEqual(objectResult.StatusCode, 200); + } + } + + private static AggregateDependencyController CreateController(IResourceLoadGraphFactory graphFactory, + bool isGraphRequest = false) + { + var apiSettings = new ApiSettings(); + Feature item = new Feature(); + item.IsEnabled = true; + item.Name = "aggregateDependencies"; + apiSettings.Features.Add(item); + + var logContextAccessor = A.Fake(); + var controller = new AggregateDependencyController(apiSettings, graphFactory, logContextAccessor); + var request = A.Fake(); + var headerDictionary = A.Fake(); + HeaderDictionary dict = new HeaderDictionary(); + + if (isGraphRequest) + { + dict.Add("Accept", CustomMediaContentTypes.GraphML); + } + + A.CallTo(() => request.Headers).Returns(dict); + + var httpContext = A.Fake(); + A.CallTo(() => httpContext.Request).Returns(request); + + var controllerContext = new ControllerContext() + { + HttpContext = httpContext, + }; + + controller.ControllerContext = controllerContext; + + return controller; + } + } +} diff --git a/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/4.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt b/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/4.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt index ba8e1d2b94..e44b90b0a5 100644 --- a/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/4.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt +++ b/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/4.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt @@ -243,8 +243,10 @@ + + @@ -276,11 +278,13 @@ + + @@ -1209,6 +1213,7 @@ + @@ -1228,6 +1233,7 @@ + @@ -1310,6 +1316,7 @@ + @@ -1346,6 +1353,7 @@ + diff --git a/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies.approved.txt b/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.0/AggregateDependencyControllerTests.Should_Get_Dependencies.approved.txt similarity index 96% rename from tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies.approved.txt rename to tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.0/AggregateDependencyControllerTests.Should_Get_Dependencies.approved.txt index b71ca9b2e3..20b43d8058 100644 --- a/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies.approved.txt +++ b/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.0/AggregateDependencyControllerTests.Should_Get_Dependencies.approved.txt @@ -175,6 +175,14 @@ "Update" ] }, + { + "resource": "/ed-fi/busRouteDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, { "resource": "/ed-fi/calendarEventDescriptors", "order": 1, @@ -383,6 +391,14 @@ "Update" ] }, + { + "resource": "/ed-fi/crisisTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, { "resource": "/ed-fi/cteProgramServiceDescriptors", "order": 1, @@ -479,6 +495,14 @@ "Update" ] }, + { + "resource": "/ed-fi/displacedStudentStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, { "resource": "/ed-fi/educationalEnvironmentDescriptors", "order": 1, @@ -695,6 +719,14 @@ "Update" ] }, + { + "resource": "/ed-fi/immunizationTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, { "resource": "/ed-fi/incidentLocationDescriptors", "order": 1, @@ -951,6 +983,14 @@ "Update" ] }, + { + "resource": "/ed-fi/nonMedicalImmunizationExemptionDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, { "resource": "/ed-fi/operationalStatusDescriptors", "order": 1, @@ -1575,6 +1615,38 @@ "Update" ] }, + { + "resource": "/ed-fi/transportationPublicExpenseEligibilityTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/transportationTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/travelDayofWeekDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/travelDirectionDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, { "resource": "/ed-fi/tribalAffiliationDescriptors", "order": 1, @@ -1623,6 +1695,14 @@ "Update" ] }, + { + "resource": "/ed-fi/crisisEvents", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, { "resource": "/ed-fi/descriptorMappings", "order": 2, @@ -2386,6 +2466,14 @@ "Update" ] }, + { + "resource": "/ed-fi/studentHealths", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, { "resource": "/ed-fi/studentHomelessProgramAssociations", "order": 14, @@ -2514,6 +2602,14 @@ "Update" ] }, + { + "resource": "/ed-fi/studentTransportations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, { "resource": "/ed-fi/contacts", "order": 15, diff --git a/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt b/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt similarity index 96% rename from tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt rename to tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt index e8535464f3..fd213d5fb8 100644 --- a/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt +++ b/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt @@ -30,6 +30,7 @@ + @@ -70,6 +71,8 @@ + + @@ -85,6 +88,7 @@ + @@ -126,6 +130,7 @@ + @@ -171,6 +176,7 @@ + @@ -256,8 +262,10 @@ + + @@ -274,12 +282,14 @@ + + @@ -293,6 +303,7 @@ + @@ -300,6 +311,7 @@ + @@ -325,6 +337,10 @@ + + + + @@ -393,6 +409,7 @@ + @@ -445,6 +462,7 @@ + @@ -456,6 +474,7 @@ + @@ -488,6 +507,7 @@ + @@ -499,6 +519,7 @@ + @@ -550,6 +571,8 @@ + + @@ -576,6 +599,7 @@ + @@ -632,6 +656,7 @@ + @@ -643,6 +668,7 @@ + @@ -676,6 +702,7 @@ + @@ -687,6 +714,7 @@ + @@ -752,6 +780,7 @@ + @@ -878,6 +907,7 @@ + @@ -889,6 +919,7 @@ + @@ -904,6 +935,7 @@ + @@ -944,6 +976,7 @@ + @@ -955,6 +988,7 @@ + @@ -1021,6 +1055,7 @@ + @@ -1032,6 +1067,7 @@ + @@ -1172,6 +1208,7 @@ + @@ -1185,6 +1222,7 @@ + @@ -1240,6 +1278,7 @@ + @@ -1260,6 +1299,7 @@ + @@ -1310,6 +1350,7 @@ + @@ -1321,6 +1362,7 @@ + @@ -1329,6 +1371,7 @@ + @@ -1353,6 +1396,7 @@ + @@ -1369,7 +1413,9 @@ + + @@ -1407,6 +1453,10 @@ + + + + diff --git a/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.cs b/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.0/AggregateDependencyControllerTests.cs similarity index 100% rename from tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.cs rename to tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.0/AggregateDependencyControllerTests.cs