diff --git a/Application/EdFi.Ods.Api/Models/GraphML/GraphMLEdge.cs b/Application/EdFi.Ods.Api/Models/GraphML/GraphMLEdge.cs index e25b3cceb2..4bb552bec7 100644 --- a/Application/EdFi.Ods.Api/Models/GraphML/GraphMLEdge.cs +++ b/Application/EdFi.Ods.Api/Models/GraphML/GraphMLEdge.cs @@ -3,19 +3,71 @@ // 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; +using EdFi.Ods.Common.Models.Domain; +using QuickGraph; + namespace EdFi.Ods.Api.Models.GraphML { // ReSharper disable once InconsistentNaming - public class GraphMLEdge + public class GraphMLEdge : IEquatable, IEdge { - public GraphMLEdge(string source, string target) + public GraphMLEdge(GraphMLNode source, GraphMLNode target) { Source = source; Target = target; } - public string Source { get; } + public GraphMLEdge(GraphMLNode source, GraphMLNode target, AssociationView edgeAssociationView) + : this(source, target) + { + AssociationView = edgeAssociationView; + } + + public AssociationView AssociationView { get; } + + public GraphMLNode Source { get; } + + public GraphMLNode Target { get; } + + #region Equality members + public bool Equals(GraphMLEdge other) + { + if (other is null) + { + return false; + } + + if (ReferenceEquals(this, other)) + { + return true; + } + + return Source.Id == other.Source.Id && Target.Id == other.Target.Id; + } + + public override bool Equals(object obj) + { + if (obj is null) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + if (obj.GetType() != GetType()) + { + return false; + } + + return Equals((GraphMLEdge)obj); + } - public string Target { get; } + public override int GetHashCode() => HashCode.Combine(Source, Target); + + #endregion } } diff --git a/Application/EdFi.Ods.Api/Models/GraphML/GraphMLNode.cs b/Application/EdFi.Ods.Api/Models/GraphML/GraphMLNode.cs index ad18efffb2..840aa615ca 100644 --- a/Application/EdFi.Ods.Api/Models/GraphML/GraphMLNode.cs +++ b/Application/EdFi.Ods.Api/Models/GraphML/GraphMLNode.cs @@ -3,11 +3,99 @@ // 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; + namespace EdFi.Ods.Api.Models.GraphML { // ReSharper disable once InconsistentNaming - public class GraphMLNode + public class GraphMLNode : IEquatable, IComparable, IComparable { + public GraphMLNode() { } + + public GraphMLNode(string id) + { + Id = id; + } + public string Id { get; set; } + + public override string ToString() => Id; + + #region Equality members + + public bool Equals(GraphMLNode other) + { + if (other is null) + { + return false; + } + + if (ReferenceEquals(this, other)) + { + return true; + } + + return Id == other.Id; + } + + public override bool Equals(object obj) + { + if (obj is null) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + if (obj.GetType() != GetType()) + { + return false; + } + + return Equals((GraphMLNode)obj); + } + + public override int GetHashCode() => (Id != null + ? Id.GetHashCode() + : 0); + + #endregion + + #region Comparable members + public int CompareTo(GraphMLNode other) + { + if (ReferenceEquals(this, other)) + { + return 0; + } + + if (other is null) + { + return 1; + } + + return string.Compare(Id, other.Id, StringComparison.OrdinalIgnoreCase); + } + + public int CompareTo(object obj) + { + if (obj is null) + { + return 1; + } + + if (ReferenceEquals(this, obj)) + { + return 0; + } + + return obj is GraphMLNode other + ? CompareTo(other) + : throw new ArgumentException($"Object must be of type {nameof(GraphMLNode)}"); + } + #endregion } } diff --git a/Application/EdFi.Ods.Api/Security/Authorization/PersonResourceGraphAuthorizationTransformer.cs b/Application/EdFi.Ods.Api/Security/Authorization/PersonResourceGraphAuthorizationTransformer.cs index 792407dba5..14c9bafd2c 100644 --- a/Application/EdFi.Ods.Api/Security/Authorization/PersonResourceGraphAuthorizationTransformer.cs +++ b/Application/EdFi.Ods.Api/Security/Authorization/PersonResourceGraphAuthorizationTransformer.cs @@ -6,7 +6,6 @@ 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; @@ -36,15 +35,13 @@ private void ApplyStaffTransformation(BidirectionalGraph x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Staff")); - var staffEdOrgEmployAssoc = - resources.FirstOrDefault( - x => x.FullName == new FullName( - EdFiConventions.PhysicalSchemaName, "StaffEducationOrganizationEmploymentAssociation")); + var staffEdOrgEmployAssoc = resources.FirstOrDefault( + x => x.FullName + == new FullName(EdFiConventions.PhysicalSchemaName, "StaffEducationOrganizationEmploymentAssociation")); - var staffEdOrgAssignAssoc = - resources.FirstOrDefault( - x => x.FullName == new FullName( - EdFiConventions.PhysicalSchemaName, "StaffEducationOrganizationAssignmentAssociation")); + var staffEdOrgAssignAssoc = resources.FirstOrDefault( + x => x.FullName + == new FullName(EdFiConventions.PhysicalSchemaName, "StaffEducationOrganizationAssignmentAssociation")); // No staff entity in the graph, nothing to do. if (staffResource == null) @@ -78,18 +75,16 @@ private void ApplyStaffTransformation(BidirectionalGraph resourceGraph) @@ -131,12 +126,10 @@ private static void ApplyStudentTransformation(BidirectionalGraph resourceGraph) @@ -144,8 +137,7 @@ private void ApplyContactTransformation(BidirectionalGraph - x.FullName == new FullName(EdFiConventions.PhysicalSchemaName, "Contact") + 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. @@ -190,13 +182,11 @@ 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 5f03e1a6e9..15787120d1 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 ?? resource.PostRetryOriginalSchemaUriSegment; + .UriSegment; /// /// 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 1d9c94cd8b..e19be66636 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(bool includePostRetryNodes = true); + BidirectionalGraph CreateResourceLoadGraph(); } } diff --git a/Application/EdFi.Ods.Common/Models/Graphs/ResourceLoadGraphFactory.cs b/Application/EdFi.Ods.Common/Models/Graphs/ResourceLoadGraphFactory.cs index 1c4b8fb177..6c55322ef9 100644 --- a/Application/EdFi.Ods.Common/Models/Graphs/ResourceLoadGraphFactory.cs +++ b/Application/EdFi.Ods.Common/Models/Graphs/ResourceLoadGraphFactory.cs @@ -24,17 +24,17 @@ public ResourceLoadGraphFactory(IResourceModelProvider resourceModelProvider, _resourceModelProvider = resourceModelProvider; _graphTransformers = graphTransformers; } - - public BidirectionalGraph CreateResourceLoadGraph(bool includePostRetryNodes) + + public BidirectionalGraph CreateResourceLoadGraph() { var resourceModel = _resourceModelProvider.GetResourceModel(); - + var resourceGraph = new BidirectionalGraph(); var resources = resourceModel.GetAllResources() .Where(r => !r.IsAbstract() && !r.FullName.IsEdFiSchoolYearType()) .ToArray(); - + resourceGraph.AddVertexRange(resources); var edges = resources @@ -59,7 +59,7 @@ public ResourceLoadGraphFactory(IResourceModelProvider resourceModelProvider, // Eliminate redundant edges .Distinct(AssociationViewEdge.Comparer); - + resourceGraph.AddEdgeRange(edges.Where(e => !e.Source.FullName.IsEdFiSchoolYearType())); // Apply predefined graph transformations @@ -70,30 +70,10 @@ public ResourceLoadGraphFactory(IResourceModelProvider resourceModelProvider, graphTransformer.Transform(resourceGraph); } } - - resourceGraph.BreakCycles(edge => edge.AssociationView?.IsSoftDependency ?? false); - - if (!includePostRetryNodes) - { - RemovePostRetryNodes(); - } - - return resourceGraph; - void RemovePostRetryNodes() - { - var postRetryVertices = resourceGraph.Vertices.Where(v => v.IsPostRetryResource).ToList(); + resourceGraph.BreakCycles(edge => edge.AssociationView.IsSoftDependency); - foreach(var postRetryVertex in postRetryVertices) - { - var outEdges = resourceGraph.OutEdges(postRetryVertex).ToList(); - foreach (var edge in outEdges) - { - resourceGraph.RemoveEdge(edge); - } - resourceGraph.RemoveVertex(postRetryVertex); - } - } + return resourceGraph; } } @@ -140,7 +120,7 @@ public static IEnumerable CreateEdges(Reference reference) } } - public override string ToString() => AssociationView.Association.ToString(); + public override string ToString() => $"({Source.FullName}) --> ({Target.FullName})"; private sealed class AssociationViewEdgeEqualityComparer : IEqualityComparer { diff --git a/Application/EdFi.Ods.Common/Models/Resource/Resource.cs b/Application/EdFi.Ods.Common/Models/Resource/Resource.cs index 84defb2c53..7dadf8b15a 100644 --- a/Application/EdFi.Ods.Common/Models/Resource/Resource.cs +++ b/Application/EdFi.Ods.Common/Models/Resource/Resource.cs @@ -74,10 +74,6 @@ 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 87a301b302..3a87c3c325 100644 --- a/Application/EdFi.Ods.Features/Controllers/AggregateDependencyController.cs +++ b/Application/EdFi.Ods.Features/Controllers/AggregateDependencyController.cs @@ -12,9 +12,11 @@ using EdFi.Ods.Api.Models.GraphML; using EdFi.Ods.Common.Configuration; using EdFi.Ods.Common.Constants; +using EdFi.Ods.Common.Conventions; using EdFi.Ods.Common.Exceptions; using EdFi.Ods.Common.Extensions; using EdFi.Ods.Common.Logging; +using EdFi.Ods.Common.Models.Domain; using EdFi.Ods.Common.Models.Graphs; using EdFi.Ods.Common.Models.Resource; using log4net; @@ -36,8 +38,22 @@ public class AggregateDependencyController : ControllerBase private readonly ILog _logger = LogManager.GetLogger(typeof(AggregateDependencyController)); private readonly bool _isEnabled; + + // ReSharper disable once InconsistentNaming + private static readonly string edfi = EdFiConventions.PhysicalSchemaName; - private const string PostRetrySuffix = "/#POSTRetry"; + private static readonly FullName _studentFullName = $"{edfi}.Student"; + private static readonly FullName _staffFullName = $"{edfi}.Staff"; + private static readonly FullName _parentFullName = $"{edfi}.Parent"; + private static readonly FullName _contactFullName = $"{edfi}.Contact"; + + private static readonly FullName _studentSchoolAssociationFullName = $"{edfi}.StudentSchoolAssociation"; + private static readonly FullName _staffEdOrgAssignmentAssociationFullName = $"{edfi}.StaffEducationOrganizationAssignmentAssociation"; + private static readonly FullName _staffEdOrgEmploymentAssociationFullName = $"{edfi}.StaffEducationOrganizationEmploymentAssociation"; + private static readonly FullName _studentParentAssociationFullName = $"{edfi}.StudentParentAssociation"; + private static readonly FullName _studentContactAssociationFullName = $"{edfi}.StudentContactAssociation"; + + private const string RetrySuffix = "#Retry"; public AggregateDependencyController( ApiSettings apiSettings, @@ -59,14 +75,15 @@ public IActionResult Get() try { - if(Request.GetTypedHeaders().Accept != null - && Request.GetTypedHeaders().Accept.Any(a => - a.MediaType.Value.EqualsIgnoreCase(CustomMediaContentTypes.GraphML))) + var resourceDependencyGraph = _resourceLoadGraphFactory.CreateResourceLoadGraph(); + + var groupedLoadOrder = GetGroupedLoadOrder(resourceDependencyGraph).ToList(); + + if (IsGraphMLRequest()) { - return Ok(CreateGraphML(_resourceLoadGraphFactory.CreateResourceLoadGraph(true))); + return Ok(CreateGraphML(resourceDependencyGraph)); } - var groupedLoadOrder = GetGroupedLoadOrder(_resourceLoadGraphFactory.CreateResourceLoadGraph(false)).ToList(); ModifyLoadOrderForAuthorizationConcerns(groupedLoadOrder); return Ok(groupedLoadOrder); } @@ -84,25 +101,105 @@ public IActionResult Get() CorrelationId = _logContextAccessor.GetCorrelationId() }.AsSerializableModel()); } + + bool IsGraphMLRequest() + { + return Request.GetTypedHeaders().Accept != null + && Request.GetTypedHeaders().Accept.Any(a => a.MediaType.Value.EqualsIgnoreCase(CustomMediaContentTypes.GraphML)); + } } // ReSharper disable once InconsistentNaming private static GraphML CreateGraphML(BidirectionalGraph resourceGraph) { + var retryNodeIdByPrimaryAssociationNodeId = new Dictionary(); + + var vertices = resourceGraph.Vertices + .SelectMany(ApplyStandardSecurityVertexExpansions) + .OrderBy(n => n.Id) + .ToList(); + + var edges = resourceGraph.Edges + .SelectMany(ApplyStandardSecurityEdgeExpansions) + .Distinct() + .GroupBy(x => x.Source) + .OrderBy(g => g.Key) + .SelectMany(g => g.OrderBy(x => x.Target)) + .ToList(); + + var graphMLExecutionGraph = new BidirectionalGraph(); + graphMLExecutionGraph.AddVertexRange(vertices); + graphMLExecutionGraph.AddEdgeRange(edges); + + // Remove any cycles resulting from the application of standard security + graphMLExecutionGraph.BreakCycles(edge => edge.AssociationView.IsSoftDependency); + return new GraphML { Id = "EdFi Dependencies", - Nodes = resourceGraph.Vertices - .Select(r => new GraphMLNode {Id = GetNodeId(r)}) - .OrderBy(n => n.Id) - .ToList(), - Edges = resourceGraph.Edges - .Select(edge => new GraphMLEdge(GetNodeId(edge.Source), GetNodeId(edge.Target))) - .GroupBy(x => x.Source) - .OrderBy(g => g.Key) - .SelectMany(g => g.OrderBy(x => x.Target)) - .ToList() + Nodes = graphMLExecutionGraph.Vertices.ToArray(), + Edges = graphMLExecutionGraph.Edges.ToArray(), }; + + IEnumerable ApplyStandardSecurityEdgeExpansions(AssociationViewEdge edge) + { + // Add a dependency for the #Retry node of edges with person types as the source + if ((edge.Source.FullName == _studentFullName && edge.Target.FullName == _studentSchoolAssociationFullName) + || (edge.Source.FullName == _staffFullName && (edge.Target.FullName == _staffEdOrgAssignmentAssociationFullName || edge.Target.FullName == _staffEdOrgEmploymentAssociationFullName)) + || (edge.Source.FullName == _parentFullName && edge.Target.FullName == _studentParentAssociationFullName) + || (edge.Source.FullName == _contactFullName && edge.Target.FullName == _studentContactAssociationFullName)) + { + string primaryAssociationNodeId = GetNodeId(edge.Target); + string retryNodeId = $"{GetNodeId(edge.Source)}{RetrySuffix}"; + + // Capture the Retry node's relationship with the primary association for redirecting the dependencies + retryNodeIdByPrimaryAssociationNodeId[primaryAssociationNodeId] = retryNodeId; + + // Yield a new edge for the primary association as a dependency of the retry node + yield return new GraphMLEdge(new GraphMLNode(primaryAssociationNodeId), new GraphMLNode(retryNodeId)); + + // Yield the standard association edge + yield return new GraphMLEdge( + new GraphMLNode(GetNodeId(edge.Source)), + new GraphMLNode(GetNodeId(edge.Target)), + edge.AssociationView); + } + // Add copies of the downstream dependencies of the primary associations with the #Retry node + else if (edge.Source.FullName == _studentSchoolAssociationFullName + || edge.Source.FullName == _staffEdOrgAssignmentAssociationFullName + || edge.Source.FullName == _staffEdOrgEmploymentAssociationFullName + || edge.Source.FullName == _studentContactAssociationFullName + || edge.Source.FullName == _studentParentAssociationFullName) + { + // Yield an association edge relocated to the retry node instead + yield return new GraphMLEdge( + new GraphMLNode(retryNodeIdByPrimaryAssociationNodeId[GetNodeId(edge.Source)]), + new GraphMLNode(GetNodeId(edge.Target)), + edge.AssociationView); + } + // Yield the standard association edge + else + { + yield return new GraphMLEdge( + new GraphMLNode(GetNodeId(edge.Source)), + new GraphMLNode(GetNodeId(edge.Target)), + edge.AssociationView); + } + } + + IEnumerable ApplyStandardSecurityVertexExpansions(Resource resource) + { + yield return new GraphMLNode { Id = GetNodeId(resource) }; + + // Yield "retry" nodes for person types + if (resource.FullName == _studentFullName + || resource.FullName == _staffFullName + || resource.FullName == _parentFullName + || resource.FullName == _contactFullName) + { + yield return new GraphMLNode() { Id = $"{GetNodeId(resource)}{RetrySuffix}" }; + } + } } private static IEnumerable GetGroupedLoadOrder( @@ -141,12 +238,7 @@ List GetLoadableResources() } private static string GetNodeId(Resource resource) - { - var suffixToApply = resource.IsPostRetryResource - ? PostRetrySuffix - : string.Empty; - return $"/{resource.SchemaUriSegment() ?? resource.PostRetryOriginalSchemaUriSegment}/{resource.PluralName.ToCamelCase()}{suffixToApply}"; - } + => $"/{resource.SchemaUriSegment()}/{resource.PluralName.ToCamelCase()}"; private static void ModifyLoadOrderForAuthorizationConcerns(IList resources) { diff --git a/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerJSONTests.cs b/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerJSONTests.cs deleted file mode 100644 index d2e2c589a0..0000000000 --- a/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerJSONTests.cs +++ /dev/null @@ -1,160 +0,0 @@ -// 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/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerGraphMLTests.cs b/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerTests.cs similarity index 96% rename from Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerGraphMLTests.cs rename to Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerTests.cs index d6cddff288..4f620288ea 100644 --- a/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerGraphMLTests.cs +++ b/Application/EdFi.Ods.Tests/EdFi.Ods.Features/Controllers/AggregateDependencyControllerTests.cs @@ -24,7 +24,7 @@ namespace EdFi.Ods.Tests.EdFi.Ods.Features.Controllers { [TestFixture] - public class AggregateDependencyControllerGraphMLTests + public class AggregateDependencyControllerTests { 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(true)) + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph()) .Returns(graph); - _controller = CreateController(_resourceLoadGraphFactory, true); + _controller = CreateController(_resourceLoadGraphFactory); } 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(true)) + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph()) .MustHaveHappened(); } @@ -88,7 +88,7 @@ protected override void Arrange() var graph = new BidirectionalGraph(); graph.AddVertex(new Resource("Test")); - A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph(true)) + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph()) .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(true)).MustHaveHappened(); + A.CallTo(() => _resourceLoadGraphFactory.CreateResourceLoadGraph()).MustHaveHappened(); } [Test] 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 e44b90b0a5..0827ac4e3b 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 @@ -174,6 +174,7 @@ + @@ -243,15 +244,14 @@ - - + @@ -278,13 +278,12 @@ - + - @@ -953,6 +952,7 @@ + @@ -1195,49 +1195,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -1315,45 +1296,44 @@ - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies.approved.txt new file mode 100644 index 0000000000..b71ca9b2e3 --- /dev/null +++ b/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies.approved.txt @@ -0,0 +1,2636 @@ +[ + { + "resource": "/ed-fi/absenceEventCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/academicHonorCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/academicSubjectDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/accommodationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/accountTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/achievementCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/additionalCreditTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/addressTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/administrationEnvironmentDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/administrativeFundingControlDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/ancestryEthnicOriginDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/assessmentCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/assessmentIdentificationSystemDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/assessmentItemCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/assessmentItemResultDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/assessmentPeriodDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/assessmentReportingMethodDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/assignmentLateStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/attemptStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/attendanceEventCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/barrierToInternetAccessInResidenceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/behaviorDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/calendarEventDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/calendarTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/careerPathwayDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/charterApprovalAgencyTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/charterStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/citizenshipStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/classroomPositionDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/cohortScopeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/cohortTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/cohortYearTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/competencyLevelDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/contactTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/contentClassDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/continuationOfServicesReasonDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/costRateDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/countryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/courseAttemptResultDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/courseDefinedByDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/courseGPAApplicabilityDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/courseIdentificationSystemDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/courseLevelCharacteristicDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/courseRepeatCodeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/credentialFieldDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/credentialTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/creditCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/creditTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/cteProgramServiceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/curriculumUsedDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/deliveryMethodDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/diagnosisDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/diplomaLevelDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/diplomaTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/disabilityDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/disabilityDesignationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/disabilityDeterminationSourceTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/disciplineActionLengthDifferenceReasonDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/disciplineDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/disciplineIncidentParticipationCodeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationalEnvironmentDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationOrganizationAssociationTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationOrganizationCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationOrganizationIdentificationSystemDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationPlanDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/electronicMailTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/eligibilityDelayReasonDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/eligibilityEvaluationTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/employmentStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/enrollmentTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/entryGradeLevelReasonDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/entryTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/evaluationDelayReasonDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/eventCircumstanceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/exitWithdrawTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/financialCollectionDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/gradebookEntryTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/gradeLevelDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/gradePointAverageTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/gradeTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/gradingPeriodDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/graduationPlanTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/gunFreeSchoolsActReportingStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/homelessPrimaryNighttimeResidenceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/homelessProgramServiceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/ideaPartDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/identificationDocumentUseDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/incidentLocationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/indicatorDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/indicatorGroupDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/indicatorLevelDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/institutionTelephoneNumberTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/interactivityStyleDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/internetAccessDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/internetAccessTypeInResidenceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/internetPerformanceInResidenceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/interventionClassDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/interventionEffectivenessRatingDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/languageDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/languageInstructionProgramServiceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/languageUseDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/learningStandardCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/learningStandardEquivalenceStrengthDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/learningStandardScopeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/levelOfEducationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/licenseStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/licenseTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/limitedEnglishProficiencyDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/localeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/localEducationAgencyCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/magnetSpecialProgramEmphasisSchoolDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/mediumOfInstructionDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/methodCreditEarnedDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/migrantEducationProgramServiceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/modelEntityDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/monitoredDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/neglectedOrDelinquentProgramDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/neglectedOrDelinquentProgramServiceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/networkPurposeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/operationalStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/otherNameTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/participationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/participationStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/performanceBaseConversionDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/performanceLevelDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/personalInformationVerificationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/platformTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/populationServedDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/postingResultDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/postSecondaryEventCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/postSecondaryInstitutionLevelDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/primaryLearningDeviceAccessDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/primaryLearningDeviceAwayFromSchoolDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/primaryLearningDeviceProviderDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/proficiencyDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programAssignmentDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programCharacteristicDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programEvaluationPeriodDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programEvaluationTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programSponsorDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/progressDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/progressLevelDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/providerCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/providerProfitabilityDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/providerStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/publicationStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/questionFormDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/raceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/ratingLevelDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/reasonExitedDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/reasonNotTestedDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/recognitionTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/relationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/repeatIdentifierDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/reporterDescriptionDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/reportingTagDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/residencyStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/responseIndicatorDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/responsibilityDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/restraintEventReasonDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/resultDatatypeTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/retestIndicatorDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/schoolCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/schoolChoiceBasisDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/schoolChoiceImplementStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/schoolFoodServiceProgramServiceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/schoolTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/sectionCharacteristicDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/sectionTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/separationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/separationReasonDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/serviceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/sexDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/sourceSystemDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/specialEducationExitReasonDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/specialEducationProgramServiceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/specialEducationSettingDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffClassificationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffIdentificationSystemDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffLeaveEventCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/stateAbbreviationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentCharacteristicDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentIdentificationSystemDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentParticipationCodeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/submissionStatusDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/supporterMilitaryConnectionDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveyCategoryDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveyLevelDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/teachingCredentialBasisDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/teachingCredentialDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/technicalSkillsAssessmentDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/telephoneNumberTypeDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/termDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/titleIPartAParticipantDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/titleIPartAProgramServiceDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/titleIPartASchoolDesignationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/tribalAffiliationDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/visaDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/weaponDescriptors", + "order": 1, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/balanceSheetDimensions", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/communityOrganizations", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/credentials", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/descriptorMappings", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationOrganizationNetworks", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/functionDimensions", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/fundDimensions", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/objectDimensions", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/operationalUnitDimensions", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/people", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/postSecondaryInstitutions", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programDimensions", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/projectDimensions", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/sourceDimensions", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/stateEducationAgencies", + "order": 2, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/communityProviders", + "order": 3, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/contacts", + "order": 3, + "operations": [ + "Create" + ] + }, + { + "resource": "/ed-fi/educationServiceCenters", + "order": 3, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffs", + "order": 3, + "operations": [ + "Create" + ] + }, + { + "resource": "/ed-fi/students", + "order": 3, + "operations": [ + "Create" + ] + }, + { + "resource": "/ed-fi/communityProviderLicenses", + "order": 4, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/localEducationAgencies", + "order": 4, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/schools", + "order": 5, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/academicWeeks", + "order": 6, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/calendars", + "order": 6, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/classPeriods", + "order": 6, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/disciplineIncidents", + "order": 6, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/feederSchoolAssociations", + "order": 6, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/gradingPeriods", + "order": 6, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/locations", + "order": 6, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/organizationDepartments", + "order": 6, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/accountabilityRatings", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/bellSchedules", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/calendarDates", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/chartOfAccounts", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/competencyObjectives", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationOrganizationNetworkAssociations", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationOrganizationPeerAssociations", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/learningStandards", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/openStaffPositions", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/sessions", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffEducationOrganizationEmploymentAssociations", + "order": 7, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/courses", + "order": 8, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationContents", + "order": 8, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/learningStandardEquivalenceAssociations", + "order": 8, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/localAccounts", + "order": 8, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programs", + "order": 8, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffEducationOrganizationAssignmentAssociations", + "order": 8, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveys", + "order": 8, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffs", + "order": 9, + "operations": [ + "Update" + ] + }, + { + "resource": "/ed-fi/cohorts", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/courseOfferings", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/interventionPrescriptions", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/localActuals", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/localBudgets", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/localContractedStaffs", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/localEncumbrances", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/localPayrolls", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programEvaluations", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffAbsenceEvents", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffDisciplineIncidentAssociations", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffEducationOrganizationContactAssociations", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffLeaves", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffProgramAssociations", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffSchoolAssociations", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveyCourseAssociations", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveyProgramAssociations", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveySections", + "order": 9, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/educationOrganizationInterventionPrescriptionAssociations", + "order": 10, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/interventions", + "order": 10, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/interventionStudies", + "order": 10, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programEvaluationObjectives", + "order": 10, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/sections", + "order": 10, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffCohortAssociations", + "order": 10, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveyQuestions", + "order": 10, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/assessments", + "order": 11, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/gradebookEntries", + "order": 11, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/programEvaluationElements", + "order": 11, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/sectionAttendanceTakenEvents", + "order": 11, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/staffSectionAssociations", + "order": 11, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveySectionAssociations", + "order": 11, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/assessmentItems", + "order": 12, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/evaluationRubricDimensions", + "order": 12, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/graduationPlans", + "order": 12, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/objectiveAssessments", + "order": 13, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentSchoolAssociations", + "order": 13, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/students", + "order": 14, + "operations": [ + "Update" + ] + }, + { + "resource": "/ed-fi/assessmentScoreRangeLearningStandards", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/postSecondaryEvents", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/restraintEvents", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentAssessments", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentCohortAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentContactAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentCTEProgramAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentDisciplineIncidentBehaviorAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentDisciplineIncidentNonOffenderAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentEducationOrganizationAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentEducationOrganizationResponsibilityAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentGradebookEntries", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentHomelessProgramAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentInterventionAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentInterventionAttendanceEvents", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentLanguageInstructionProgramAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentMigrantEducationProgramAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentNeglectedOrDelinquentProgramAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentProgramAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentProgramAttendanceEvents", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentProgramEvaluations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentSchoolAttendanceEvents", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentSchoolFoodServiceProgramAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentSectionAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentSectionAttendanceEvents", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentSpecialEducationProgramAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentSpecialEducationProgramEligibilityAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentTitleIPartAProgramAssociations", + "order": 14, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/contacts", + "order": 15, + "operations": [ + "Update" + ] + }, + { + "resource": "/ed-fi/disciplineActions", + "order": 15, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/grades", + "order": 15, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentAssessmentEducationOrganizationAssociations", + "order": 15, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentCompetencyObjectives", + "order": 15, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveyResponses", + "order": 15, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/reportCards", + "order": 16, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveyQuestionResponses", + "order": 16, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveyResponseEducationOrganizationTargetAssociations", + "order": 16, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveyResponseStaffTargetAssociations", + "order": 16, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveySectionResponses", + "order": 16, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/studentAcademicRecords", + "order": 17, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveySectionResponseEducationOrganizationTargetAssociations", + "order": 17, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/surveySectionResponseStaffTargetAssociations", + "order": 17, + "operations": [ + "Create", + "Update" + ] + }, + { + "resource": "/ed-fi/courseTranscripts", + "order": 18, + "operations": [ + "Create", + "Update" + ] + } +] \ No newline at end of file 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.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt new file mode 100644 index 0000000000..e8535464f3 --- /dev/null +++ b/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.0.0/AggregateDependencyControllerTests.Should_Get_Dependencies_GraphML.approved.txt @@ -0,0 +1,1416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.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 index fd213d5fb8..08dc184602 100644 --- a/tests/EdFi.Ods.WebApi.IntegrationTests/Controllers/Standard/5.1.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 @@ -52,6 +52,7 @@ + @@ -262,15 +263,14 @@ - - + @@ -282,7 +282,6 @@ - @@ -302,8 +301,8 @@ + - @@ -528,6 +527,7 @@ + @@ -1259,51 +1259,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -1370,8 +1350,7 @@ - - + @@ -1381,41 +1360,41 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +