diff --git a/Dfe.Academies.Academisation.IService/ServiceModels/TransferProject/ExportedTransferProjectModel.cs b/Dfe.Academies.Academisation.IService/ServiceModels/TransferProject/ExportedTransferProjectModel.cs index 4e7abe3f..af9c9f7f 100644 --- a/Dfe.Academies.Academisation.IService/ServiceModels/TransferProject/ExportedTransferProjectModel.cs +++ b/Dfe.Academies.Academisation.IService/ServiceModels/TransferProject/ExportedTransferProjectModel.cs @@ -14,6 +14,7 @@ public class ExportedTransferProjectModel public string? IncomingTrustUkprn { get; init; } public string? LocalAuthority { get; init; } public string? OutgoingTrustName { get; init; } + public string? OutgoingTrustUKPRN { get; init; } public DateTime? ProposedAcademyTransferDate { get; init; } public string? Region { get; init; } public string? SchoolName { get; init; } @@ -22,5 +23,6 @@ public class ExportedTransferProjectModel public string? TransferReason { get; init; } public string? TransferType { get; init; } public string? Urn { get; init; } + public string? PFI { get; init; } } } diff --git a/Dfe.Academies.Academisation.Service.UnitTest/Queries/TransferProjectQueryServiceTests.cs b/Dfe.Academies.Academisation.Service.UnitTest/Queries/TransferProjectQueryServiceTests.cs index 62287d78..19b9586c 100644 --- a/Dfe.Academies.Academisation.Service.UnitTest/Queries/TransferProjectQueryServiceTests.cs +++ b/Dfe.Academies.Academisation.Service.UnitTest/Queries/TransferProjectQueryServiceTests.cs @@ -112,14 +112,26 @@ public async Task GetExportedTransferProjects_ShouldReturnExpectedResponse() // Mocking the data var mockDecision = new Mock(); + var mockTransferProject = new MockTransferProject("dummyOutgoingTrustUkprn", "dummyOutgoingTrustName", new List() { new("dummyIncomingTrustUkprn1", "dummyOutgoingAcademyUkprn1", "dummyIncomingTrustName1", "dummyRegion", "dummyLocalAuthority") }).CreateMock(); + // Mock establishment data + var establishmentDto = new EstablishmentDto + { + Ukprn = "dummyOutgoingAcademyUkprn1", + Urn = "123456", + Name = "Dummy Academy", + LocalAuthorityName = "Local Authority1", + EstablishmentType = new NameAndCodeDto { Name = "Type1" }, + Gor = new NameAndCodeDto { Name = "Region1" } + }; // Mock the setup to return the dummy project - mockRepository.Setup(repo => repo.SearchProjects(It.IsAny>(), It.IsAny(), It.IsAny>(), It.IsAny(), It.IsAny())).ReturnsAsync((new List() { mockTransferProject.Object }, 1)); + mockRepository.Setup(repo => repo.SearchProjects(It.IsAny>(), It.IsAny(), It.IsAny>(), It.IsAny(), It.IsAny())) + .ReturnsAsync((new List() { mockTransferProject.Object }, 1)); // Set up behavior for methods mockAdvisoryBoardDecisionGetDataByProjectIdQuery @@ -127,8 +139,8 @@ public async Task GetExportedTransferProjects_ShouldReturnExpectedResponse() .ReturnsAsync(mockDecision.Object); mockAcademiesQueryService - .Setup(academiesQueryService => academiesQueryService.GetEstablishmentByUkprn(It.IsAny())) - .ReturnsAsync(It.IsAny()); + .Setup(service => service.GetBulkEstablishmentsByUkprn(It.IsAny>())) + .ReturnsAsync(new List { establishmentDto }); var service = new TransferProjectQueryService( mockRepository.Object, @@ -138,13 +150,22 @@ public async Task GetExportedTransferProjects_ShouldReturnExpectedResponse() // Setting up Test Data var dummyProjects = new List - { - GetDummyTransferProjectModel( - "dummyIncomingTrustName1", - "dummyIncomingTrustUkprn1", - "dummyOutgoingTrustName" - ) - }; + { + new ExportedTransferProjectModel + { + Id = 0, + IncomingTrustName = "dummyIncomingTrustName1", + IncomingTrustUkprn = "dummyIncomingTrustUkprn1", + OutgoingTrustName = "dummyOutgoingTrustName", + OutgoingTrustUKPRN = "dummyOutgoingTrustUkprn", + LocalAuthority = "Local Authority1", + Region = "Region1", + SchoolName = "Dummy Academy", + SchoolType = "Type1", + Urn = "123456", + PFI = " " + } + }; var expectedResponse = new PagedResultResponse(dummyProjects, 1); // Testing the Method @@ -154,6 +175,7 @@ public async Task GetExportedTransferProjects_ShouldReturnExpectedResponse() result.Should().BeEquivalentTo(expectedResponse); } + [Fact] public async Task GetExportedTransferProjects_ShouldReturnNoResultsWhenFiltered() { @@ -192,6 +214,7 @@ public async Task GetExportedTransferProjectsWithMultipleAcademies_ShouldReturnE // Mocking the data var mockDecision = new Mock(); var mockTransferProject = new MockTransferProject("dummyOutgoingTrustUkprn", "dummyOutgoingTrustName", new List() { + new("dummyIncomingTrustUkprn1", "dummyOutgoingAcademyUkprn1", "dummyIncomingTrustName1", "dummyRegion", "dummyLocalAuthority"), new("dummyIncomingTrustUkprn2", "dummyOutgoingAcademyUkprn2", "dummyIncomingTrustName2", "dummyRegion", "dummyLocalAuthority") }).CreateMock(); @@ -204,12 +227,11 @@ public async Task GetExportedTransferProjectsWithMultipleAcademies_ShouldReturnE .Setup(query => query.GetAdvisoryBoardDecisionById(It.IsAny())) .ReturnsAsync(mockDecision.Object); - List establishments = new List() - { - new EstablishmentDto() { Name = "dummyAcademy1", LocalAuthorityName = "dummyLocalAuthority1", Ukprn = "dummyOutgoingAcademyUkprn1" }, - new EstablishmentDto() { Name = "dummyAcademy2", Ukprn = "dummyOutgoingAcademyUkprn2" } - }; + { + new EstablishmentDto() { Name = "dummyAcademy1", LocalAuthorityName = "dummyLocalAuthority1", Ukprn = "dummyOutgoingAcademyUkprn1" }, + new EstablishmentDto() { Name = "dummyAcademy2", Ukprn = "dummyOutgoingAcademyUkprn2" } + }; mockAcademiesQueryService.Setup(academiesQueryService => academiesQueryService.GetBulkEstablishmentsByUkprn(It.IsAny>())) .ReturnsAsync(establishments); @@ -222,16 +244,37 @@ public async Task GetExportedTransferProjectsWithMultipleAcademies_ShouldReturnE // Setting up Test Data var dummyProjects = new List - { - GetDummyTransferProjectModel( - "dummyIncomingTrustName1", - "dummyIncomingTrustUkprn1", - "dummyOutgoingTrustName", - "dummyAcademy1, dummyAcademy2", - "dummyLocalAuthority1" - ) - }; - var expectedResponse = new PagedResultResponse(dummyProjects, 1); + { + new ExportedTransferProjectModel + { + Id = 0, + IncomingTrustName = "dummyIncomingTrustName1", + IncomingTrustUkprn = "dummyIncomingTrustUkprn1", + OutgoingTrustName = "dummyOutgoingTrustName", + OutgoingTrustUKPRN = "dummyOutgoingTrustUkprn", + LocalAuthority = "dummyLocalAuthority1", + Region = null, + SchoolName = "dummyAcademy1", + SchoolType = null, + Urn = null, + PFI = " " + }, + new ExportedTransferProjectModel + { + Id = 0, + IncomingTrustName = "dummyIncomingTrustName1", + IncomingTrustUkprn = "dummyIncomingTrustUkprn1", + OutgoingTrustName = "dummyOutgoingTrustName", + OutgoingTrustUKPRN = "dummyOutgoingTrustUkprn", + LocalAuthority = null, + Region = null, + SchoolName = "dummyAcademy2", + SchoolType = null, + Urn = null, + PFI = " " + } + }; + var expectedResponse = new PagedResultResponse(dummyProjects, 2); // Testing the Method var result = await service.GetExportedTransferProjects(Enumerable.Empty(), null, Enumerable.Empty(), 1, 10); @@ -240,27 +283,6 @@ public async Task GetExportedTransferProjectsWithMultipleAcademies_ShouldReturnE result.Should().BeEquivalentTo(expectedResponse); } - private static ExportedTransferProjectModel GetDummyTransferProjectModel( - string incomingTrustName, - string incomingTrustUkprn, - string outgoingTrustName, - string schoolName = "", - string localAuthority = "" - ) - { - return new() - { - IncomingTrustName = incomingTrustName, - IncomingTrustUkprn = incomingTrustUkprn, - OutgoingTrustName = outgoingTrustName, - SchoolName = schoolName, - LocalAuthority = localAuthority, - Region = "", - SchoolType = "", - Urn = "0" - }; - } - [Fact] public async Task GetProjects_ReturnsFilteredProjects() diff --git a/Dfe.Academies.Academisation.Service/Queries/TransferProjectExportService.cs b/Dfe.Academies.Academisation.Service/Queries/TransferProjectExportService.cs index a0c7a07e..e98692e2 100644 --- a/Dfe.Academies.Academisation.Service/Queries/TransferProjectExportService.cs +++ b/Dfe.Academies.Academisation.Service/Queries/TransferProjectExportService.cs @@ -32,9 +32,9 @@ public TransferProjectExportService(ITransferProjectQueryService transferProject private static Task GenerateSpreadsheet(IEnumerable projects) { string[] headers = new[]{ - "School", "URN", "School Type", "Incoming Trust", "Outgoing Trust", "Incoming Trust UKPRN", "Local Authority", "Region", + "Academy", "URN", "Academy Type", "Incoming Trust", "Incoming Trust UKPRN","Outgoing Trust", "Outgoing Trust UKPRN", "Local Authority", "Region", "Advisory Board Date", "Decision Date", "Status", "Assigned To", "Reason for transfer", "Type of transfer", - "Proposed academy transfer date" + "Proposed academy transfer date", "PFI (Private Finance Initiative)" }; var workbook = new XLWorkbook(); @@ -53,17 +53,19 @@ private static Task GenerateSpreadsheet(IEnumerable> MapExportedTransfe foreach (var transferProject in atp) { + if (transferProject == null) { continue; @@ -143,23 +144,26 @@ private async Task> MapExportedTransfe var _ukprns = transferProject.TransferringAcademies.Select(ta => ta.OutgoingAcademyUkprn); var establishmentsForTheseAcademies = establishments.Where(e => _ukprns.Contains(e.Ukprn)); - - var decision = decisions.SingleOrDefault(x => x.AdvisoryBoardDecisionDetails.TransferProjectId == transferProject.Id); - var project = await MapProject(transferProject, establishmentsForTheseAcademies, decision).ConfigureAwait(false); - projects.Add(project); + foreach (var transferringEstablishment in establishmentsForTheseAcademies) + { + var decision = decisions.SingleOrDefault(x => x.AdvisoryBoardDecisionDetails.TransferProjectId == transferProject.Id); + var transferringAcademy = transferProject.TransferringAcademies.Where(s => s.OutgoingAcademyUkprn == transferringEstablishment.Ukprn).Single(); + var project = await MapProject(transferProject, transferringEstablishment, decision, $"{transferringAcademy.PFIScheme} {transferringAcademy.PFISchemeDetails}").ConfigureAwait(false); + projects.Add(project); + } } return projects.AsEnumerable(); } - private async Task MapProject(ITransferProject? project, IEnumerable schools, IConversionAdvisoryBoardDecision? advisoryBoardDecision) + private async Task MapProject(ITransferProject? project, EstablishmentDto? school, IConversionAdvisoryBoardDecision? advisoryBoardDecision, string transferringAcademyPfi) { var transferringAcademies = project.TransferringAcademies; - var schoolNames = schools.Select(s => s?.Name).Distinct().JoinNonEmpty(", "); - var schoolTypes = schools.Select(s => s?.EstablishmentType?.Name).Distinct().JoinNonEmpty(", "); - var regions = schools.Select(s => s?.Gor?.Name).Distinct().JoinNonEmpty(", "); - var localAuthorities = schools.Select(s => s?.LocalAuthorityName).Distinct().JoinNonEmpty(", "); + var schoolName = school?.Name; + var schoolType = school.EstablishmentType?.Name; + var region = school.Gor?.Name; + var localAuthority = school.LocalAuthorityName; var reason = project.SpecificReasonsForTransfer?.JoinNonEmpty(", "); return new ExportedTransferProjectModel @@ -170,16 +174,18 @@ private async Task MapProject(ITransferProject? pr DecisionDate = advisoryBoardDecision?.AdvisoryBoardDecisionDetails?.AdvisoryBoardDecisionDate, IncomingTrustName = transferringAcademies.FirstOrDefault()?.IncomingTrustName, IncomingTrustUkprn = transferringAcademies.FirstOrDefault()?.IncomingTrustUkprn, - LocalAuthority = localAuthorities, - OutgoingTrustName = project.OutgoingTrustName, + LocalAuthority = localAuthority, + OutgoingTrustName = project?.OutgoingTrustName, + OutgoingTrustUKPRN = project?.OutgoingTrustUkprn, ProposedAcademyTransferDate = project.TargetDateForTransfer, - Region = regions, - SchoolName = schoolNames, - SchoolType = schoolTypes, + Region = region, + SchoolName = schoolName, + SchoolType = schoolType, Status = project.Status, TransferReason = reason, TransferType = project.WhoInitiatedTheTransfer, - Urn = project.Urn.ToString(), + Urn = school.Urn, + PFI = transferringAcademyPfi }; } diff --git a/terraform/.terraform.lock.hcl b/terraform/.terraform.lock.hcl index 1dd02632..0f52ba51 100644 --- a/terraform/.terraform.lock.hcl +++ b/terraform/.terraform.lock.hcl @@ -2,72 +2,62 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/azure/azapi" { - version = "1.11.0" - constraints = ">= 1.6.0" + version = "1.13.1" + constraints = ">= 1.13.0" hashes = [ - "h1:pAmiyTB57yTBpZHofES31WD35Z/lyKAuXbTWarpNDYU=", - "zh:240ba0f3d87f8faf3171e1dd0ec74bffc868bde84db7fb2c89913c787b11ef07", - "zh:422cfbe039f6041525d55aa0641dfed014d970b516d8de058a1869736682b9d3", - "zh:4be67c64d73eb3c31706d575436179cc6f6b3dece00709e5721b60512031b2f2", - "zh:744b4f68b229c11b3df1198e4ebb4646fa44c14ac5f271337da03917d9fad433", - "zh:86927d43f75a8163c2c947fae8d48a63219865e50df437372ee66378826172a1", - "zh:a44523fad3a806b2ccee2e81ef206ddaab365eacdec213ec2cce2ddd7d4ed731", - "zh:b15c9edac6df2c250ff04f0edae18a9656d19c79c475ef68be5f5c2631059d7e", - "zh:d1365f7fe280c11cc7613b4b47798c1f96271c4bb2eed951d6a994790d0b62d4", - "zh:e7fea9c180f1f2be6e96152a3b4e0beada3aa585c186f1f3de6be6c74ee858fe", - "zh:e8278579b6a18e04a538a1163e257a9be65a3cc35e13a57ea868f179ca03ec28", - "zh:fc8f4eeefb44877965eae59e152d82e347261936d47d4d3c448cde5181164ae3", - "zh:fd76a6fb2819a1ce56454132c775b721c5028e4f24dd264f2897f345cd4b12ee", + "h1:2cnqo8u7YMuBexFZv8/lXGxIn1dXuEnC44LAL90GAa0=", + "zh:1f2aceddd67ceeb82a75c2f15dc01e54781e9aed5968507dbc29590c165b2e2b", + "zh:397f0bfbac899d48e23cecf38d362c27562150aa20b19157b5bd370b8e6801ee", + "zh:652263b7d00623684e29ef7b8ff285a17c5bd7cc8ba7d22967c66d0b3a3c568a", + "zh:652c53320a41434942877515780296a1509be03f32d54e60178f39200f960a67", + "zh:666426faf686401e54ec09fe06e9d7c06a6455ec398764f70558440c73aeb7f9", + "zh:6aa91ae8ba78f2494f99b4c99e66d15ed0b14d735cd1f77adc12ff9dfa075807", + "zh:a529e5a13c37d1805c469227f08cdbe7527d04dd64d18709d26627c6a0b588b1", + "zh:a589c049205e8e5bf94a13d56b28f400d908ad27e13e16df64408ee82eb8a0ff", + "zh:a9a50defdee230f315f74be6c77ff104fe2610a1b3ad6b87326f555e80d13b18", + "zh:ba49ef70d96e13795e2dbffd6cb2ff976dfe84e0373a5971ebe3b4c9c9b7af60", + "zh:d3ed50efe5f8c80d3d7d464ab9a13ccf82440d871c9ce3032ce476845364c6b9", + "zh:e3eb48ee8c36ee4f81850d8a21fc59b81886c729d7c3b7adece4a25f355bed2f", ] } provider "registry.terraform.io/hashicorp/azuread" { - version = "2.47.0" + version = "2.50.0" constraints = ">= 2.37.1" hashes = [ - "h1:g8+gBFM4QVOEQFqAEs5pR6iXpbGvgPvcEi1evHwziyw=", - "zh:1372d81eb24ef3b4b00ea350fe87219f22da51691b8e42ce91d662f6c2a8af5e", + "h1:/G7xnO8J6f2WvVXBfd111XeKjKsw2t9Oj7WkDLu4Ygc=", + "zh:0eb91d177d1d868dc50c006f07fb17905318555c5c7ff56ba5a8a623415e9342", + "zh:1baabaca448f4cab0cb31cbb1b564d1849a13ca4a6536d1a6f92097b88cd883d", "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", - "zh:1e654a74d171d6ff8f9f6f67e3ff1421d4c5e56a18607703626bf12cd23ba001", - "zh:35227fad617a0509c64ab5759a8b703b10d244877f1aa5416bfbcc100c96996f", - "zh:357f553f0d78d46a96c7b2ed06d25ee0fc60fc5be19812ccb5d969fa47d62e17", - "zh:58faa2940065137e3e87d02eba59ab5cd7137d7a18caf225e660d1788f274569", - "zh:7308eda0339620fa24f47cedd22221fc2c02cab9d5be1710c09a783aea84eb3a", - "zh:863eabf7f908a8263e28d8aa2ad1381affd6bb5c67755216781f674ef214100e", - "zh:8b95b595a7c14ed7b56194d03cdec253527e7a146c1c58961be09e6b5c50baee", - "zh:afbca6b4fac9a0a488bc22ff9e51a8f14e986137d25275068fd932f379a51d57", - "zh:c6aadec4c81a44c3ffc22c2d90ffc6706bf5a9a903a395d896477516f4be6cbb", - "zh:e54a59de7d4ef0f3a18f91fed0b54a2bce18257ae2ee1df8a88226e1023c5811", + "zh:4fdd139514253128f389ac00b7942c4a4da10135b120ff4c0dc0fd8382c3b003", + "zh:6adb28fd81775a79b894d4c15dc292188ff2b1ff7f9d5bacd6db19ca75a71f92", + "zh:6bcd4d8ec7ad5b15b576defc803958948717d496b2c1356a77577eb6f86ac1b6", + "zh:8a4b65cb3f67199bf1a46f8061169373dcfb5619934ecf80eaf143d8a8b4f1db", + "zh:93c886fc940619b74610b88b067491d2b731e27e20550b08a44227c1b2e59022", + "zh:9a16a45fa544f0b777bf2f83b1e1156018b0737c9359c432c2d774451f168b59", + "zh:9b191e3496e8d461f612b1a767b44821d2ea62545f7f0363690c0b6fc73af37b", + "zh:e6575b9c6ca30c3adc6b39839f246be3d9d8ce883a111fb695f1618df3887574", + "zh:f5c5336948cd05a9dd64a5938c5edfb90adfda0df89d80e80da1a1fdb2c61816", ] } provider "registry.terraform.io/hashicorp/azurerm" { - version = "3.105.0" + version = "3.106.1" constraints = ">= 3.52.0, >= 3.76.0" hashes = [ - "h1:B9WmeqWXe+ejCj6VpU7m+zPu5hqTEkB2wyHyoeQXz8k=", - "h1:MK83TecMdabDD+HjbxdTt3emXp8G6djLj7KvvUGstM0=", - "h1:NVi/0D9cpcEVxM9xpa0G73nsQb0f26yeaq7ZVSKJaKo=", - "h1:OtWRTAMNOruOmwVB72QSGXC5IIGGQcHwEqnCCmsGbGM=", - "h1:QudLeb0l1jNfahLSUnLWS0vqmExt0dSw/GQH0CClYDA=", - "h1:SOC7EdvKd5YowghQvb6hu209F1PQqtb8LulbQkxOZQQ=", - "h1:g+BWJMkkFkP/p6iMVi6OxvdJHp8ptmmP8J144sgVYpA=", - "h1:lIAUZbyV5E7DjwTMvuqdSVBjAImzh+30aPuPPHqe1Y8=", - "h1:skN4ChgDx1Jj/gewsraaENsGpvd2effDnhnu53xCxVk=", - "h1:tEDW5rEALglcH1JRy31z6AzDULECYrAZOD24B4mqry8=", - "h1:zWkzhP2fx0WQIAUp6Amk/We3WNcbtiWagpKF5PJP5+M=", - "zh:2f81bca6a3bf3d37604bf99fdb2c77d6118520aa379ab65fd28e6b76bed399cd", - "zh:3578eb79d175af9544b0dc543124d551c0fed4c48f51773ee17e1dc62e22833a", - "zh:377dbb56caea3fa1e6a6599193b55c8594204c40c054fc2ace4f576fdfe750a2", - "zh:3d1cf01929cb213ff9a0f9753e35699bf13f60f7f0f15b38f1b216fa2cbb5f72", - "zh:481376d79224a0e4aebc6e39dee10de3cc14efd1c7c58b6d74c538e356cf4bb2", - "zh:625119aec0d24ff693c589d802b7983ffce3fcf1e9c3351396af02799dd176ca", - "zh:65981e62a6e9eb8a39dd332632617e8c929dcce6af48d3829f590f5c0f14362f", - "zh:72db82697f4e694c21defa8d0efb22f71d373676d078d71d567e8b4d9a134df7", - "zh:a0fa43cf78716ff98eccd7506b017c5c487034d9d9cce88c1accdba9314a4822", - "zh:b073f60b68b0102128815251dd895ec7f24bddec84a1b725fc0777de8a78dc7e", - "zh:b601e509eb9735756b6b7ccacc15d6333769a7bb2f8ac8c394e39b29cfc6ee55", + "h1:TGVwyqUveICBylWBetwlEXY/YO55guu/PFii/Yuh03M=", + "zh:2b928f01afe43e970043ddec6f7da2094008863e65b50ef36e01f1a514eee1c2", + "zh:3aae5f7342dffaea01702a5e441b58d327b5257bfba596aec8594c506acc95cc", + "zh:590b6ce158a495ed9fffa8c4c09da4f0a28c9e280742b4e96145d0f21f79a680", + "zh:688017624d911b572d033f71afd89bd7b35f1b4d5f49bbeeedcdf2869f499b8a", + "zh:72654b6d0aaca407752d42915c7806431031a2b26596ffafd4fc509dfc5daf29", + "zh:7978056e1cd70a3915666bfeda53ff8073db99777a761754fac8d81048245c6b", + "zh:a823423dd5cf91c365399ba0816fc859d873376db08f7f23c51a34633e36ecad", + "zh:b6954016f483b4ba5c7f52427102ed66721d5436f3335042e278dab53a519f09", + "zh:cd1dd2671378aaa300cdd48b4f71797027a37442e49e3e45c71aa9b90f1ff583", + "zh:d67474dddf22411c8e621e368f19daeaa7168e9b2d2d3630e0a8f87faa187058", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:fa18b9a73cf078acedbdc5085353e70f824968bbe55292edb5cb7cff88cd9033", ] } diff --git a/terraform/README.md b/terraform/README.md index 449b0022..6b81269e 100644 --- a/terraform/README.md +++ b/terraform/README.md @@ -125,6 +125,7 @@ If everything looks good, answer `yes` and wait for the new infrastructure to be | Name | Version | |------|---------| | [terraform](#requirement\_terraform) | >= 1.6.1 | +| [azapi](#requirement\_azapi) | >= 1.13.0 | | [azurerm](#requirement\_azurerm) | >= 3.76.0 | | [statuscake](#requirement\_statuscake) | >= 2.1.0 | diff --git a/terraform/versions.tf b/terraform/versions.tf index 99416e03..683cf23f 100644 --- a/terraform/versions.tf +++ b/terraform/versions.tf @@ -9,9 +9,9 @@ terraform { source = "StatusCakeDev/statuscake" version = ">= 2.1.0" } - } - azapi = { - source = "Azure/azapi" - version = ">= 1.13.0" + azapi = { + source = "Azure/azapi" + version = ">= 1.13.0" + } } }