Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Continue making readonly more explicit #1716

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions backend/api.test/Database/DatabaseUtilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ namespace Api.Test.Database
public class DatabaseUtilities
{
private readonly AccessRoleService _accessRoleService;
private readonly MissionTaskService _missionTaskService;
private readonly AreaService _areaService;
private readonly DeckService _deckService;
private readonly InstallationService _installationService;
Expand All @@ -28,13 +29,14 @@ public DatabaseUtilities(FlotillaDbContext context)

_accessRoleService = new AccessRoleService(context, new HttpContextAccessor());
_installationService = new InstallationService(context, _accessRoleService);
_missionTaskService = new MissionTaskService(context, new Mock<ILogger<MissionTaskService>>().Object);
_plantService = new PlantService(context, _installationService, _accessRoleService);
_deckService = new DeckService(context, defaultLocalizationPoseService, _installationService, _plantService, _accessRoleService, new MockSignalRService());
_areaService = new AreaService(context, _installationService, _plantService, _deckService, defaultLocalizationPoseService, _accessRoleService);
_userInfoService = new UserInfoService(context, new HttpContextAccessor(), new Mock<ILogger<UserInfoService>>().Object);
_missionRunService = new MissionRunService(context, new MockSignalRService(), new Mock<ILogger<MissionRunService>>().Object, _accessRoleService, _userInfoService);
_robotModelService = new RobotModelService(context);
_robotService = new RobotService(context, new Mock<ILogger<RobotService>>().Object, _robotModelService, new MockSignalRService(), _accessRoleService, _installationService, _areaService, _missionRunService);
_robotService = new RobotService(context, new Mock<ILogger<RobotService>>().Object, _robotModelService, new MockSignalRService(), _accessRoleService, _installationService, _areaService);
_missionRunService = new MissionRunService(context, new MockSignalRService(), new Mock<ILogger<MissionRunService>>().Object, _accessRoleService, _missionTaskService, _areaService, _robotService, _userInfoService);
}

public async Task<MissionRun> NewMissionRun(
Expand Down Expand Up @@ -161,7 +163,7 @@ public async Task<Robot> NewRobot(RobotStatus status, Installation installation,
RobotCapabilities = [RobotCapabilitiesEnum.drive_to_pose, RobotCapabilitiesEnum.take_image, RobotCapabilitiesEnum.return_to_home, RobotCapabilitiesEnum.localize]
};

var robotModel = await _robotModelService.ReadByRobotType(createRobotQuery.RobotType);
var robotModel = await _robotModelService.ReadByRobotType(createRobotQuery.RobotType, readOnly: true);
var robot = new Robot(createRobotQuery, installation, area)
{
Model = robotModel!
Expand Down
50 changes: 27 additions & 23 deletions backend/api.test/EventHandlers/TestMissionEventHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ public TestMissionEventHandler(DatabaseFixture fixture)
var missionDefinitionServiceLogger = new Mock<ILogger<MissionDefinitionService>>().Object;
var lastMissionRunServiceLogger = new Mock<ILogger<LastMissionRunService>>().Object;
var sourceServiceLogger = new Mock<ILogger<SourceService>>().Object;
var errorHandlingServiceLogger = new Mock<ILogger<ErrorHandlingService>>().Object;
var missionTaskServiceLogger = new Mock<ILogger<MissionTaskService>>().Object;

var configuration = WebApplication.CreateBuilder().Configuration;

Expand All @@ -64,12 +66,11 @@ public TestMissionEventHandler(DatabaseFixture fixture)

_mqttService = new MqttService(mqttServiceLogger, configuration);

_missionRunService = new MissionRunService(context, signalRService, missionLogger, accessRoleService, userInfoService);

var missionTaskService = new MissionTaskService(context, missionTaskServiceLogger);

var missionLoader = new MockMissionLoader();
var stidServiceMock = new MockStidService(context);
var missionDefinitionService = new MissionDefinitionService(context, missionLoader, signalRService, accessRoleService, missionDefinitionServiceLogger, _missionRunService);
var sourceService = new SourceService(context, sourceServiceLogger);
var robotModelService = new RobotModelService(context);
var taskDurationServiceMock = new MockTaskDurationService();
var isarServiceMock = new MockIsarService();
Expand All @@ -79,12 +80,14 @@ public TestMissionEventHandler(DatabaseFixture fixture)
var deckService = new DeckService(context, defaultLocalizationPoseService, installationService, plantService, accessRoleService, signalRService);
var areaService = new AreaService(context, installationService, plantService, deckService, defaultLocalizationPoseService, accessRoleService);
var mapServiceMock = new MockMapService();
_robotService = new RobotService(context, robotServiceLogger, robotModelService, signalRService, accessRoleService, installationService, areaService, _missionRunService);
_robotService = new RobotService(context, robotServiceLogger, robotModelService, signalRService, accessRoleService, installationService, areaService);
_missionRunService = new MissionRunService(context, signalRService, missionLogger, accessRoleService, missionTaskService, areaService, _robotService, userInfoService);
var missionDefinitionService = new MissionDefinitionService(context, missionLoader, signalRService, accessRoleService, missionDefinitionServiceLogger, _missionRunService, sourceService);
_localizationService = new LocalizationService(localizationServiceLogger, _robotService, installationService, areaService);

var errorHandlingService = new ErrorHandlingService(errorHandlingServiceLogger, _robotService, _missionRunService);
var returnToHomeService = new ReturnToHomeService(returnToHomeServiceLogger, _robotService, _missionRunService, mapServiceMock);
_missionSchedulingService = new MissionSchedulingService(missionSchedulingServiceLogger, _missionRunService, _robotService, areaService,
isarServiceMock, _localizationService, returnToHomeService, signalRService);
isarServiceMock, _localizationService, returnToHomeService, signalRService, errorHandlingService);
var lastMissionRunService = new LastMissionRunService(missionDefinitionService);

_databaseUtilities = new DatabaseUtilities(context);
Expand Down Expand Up @@ -164,7 +167,7 @@ public async Task ScheduledMissionStartedWhenSystemIsAvailable()
Thread.Sleep(100);

// Assert
var postTestMissionRun = await _missionRunService.ReadById(missionRun.Id);
var postTestMissionRun = await _missionRunService.ReadById(missionRun.Id, readOnly: true);
Assert.Equal(MissionStatus.Ongoing, postTestMissionRun!.Status);
}

Expand All @@ -186,8 +189,8 @@ public async Task SecondScheduledMissionQueuedIfRobotIsBusy()
await _missionRunService.Create(missionRunTwo);

// Assert
var postTestMissionRunOne = await _missionRunService.ReadById(missionRunOne.Id);
var postTestMissionRunTwo = await _missionRunService.ReadById(missionRunTwo.Id);
var postTestMissionRunOne = await _missionRunService.ReadById(missionRunOne.Id, readOnly: true);
var postTestMissionRunTwo = await _missionRunService.ReadById(missionRunTwo.Id, readOnly: true);
Assert.Equal(MissionStatus.Ongoing, postTestMissionRunOne!.Status);
Assert.Equal(MissionStatus.Pending, postTestMissionRunTwo!.Status);
}
Expand Down Expand Up @@ -222,7 +225,7 @@ public async Task NewMissionIsStartedWhenRobotBecomesAvailable()
Thread.Sleep(500);

// Assert
var postTestMissionRun = await _missionRunService.ReadById(missionRun.Id);
var postTestMissionRun = await _missionRunService.ReadById(missionRun.Id, readOnly: true);
Assert.Equal(MissionStatus.Ongoing, postTestMissionRun!.Status);
}

Expand Down Expand Up @@ -258,7 +261,7 @@ public async Task ReturnToHomeMissionIsStartedIfQueueIsEmptyWhenRobotBecomesAvai
],
OrderBy = "DesiredStartTime",
PageSize = 100
});
}, readOnly: true);
Assert.True(ongoingMission.Any());
}

Expand All @@ -272,6 +275,7 @@ public async Task ReturnToHomeMissionIsNotStartedIfReturnToHomeIsNotSupported()
var area = await _databaseUtilities.NewArea(installation.InstallationCode, plant.PlantCode, deck.Name);
var robot = await _databaseUtilities.NewRobot(RobotStatus.Busy, installation, area);
robot.RobotCapabilities!.Remove(RobotCapabilitiesEnum.return_to_home);
await _robotService.Update(robot);

var mqttEventArgs = new MqttReceivedArgs(
new IsarStatusMessage
Expand All @@ -295,7 +299,7 @@ public async Task ReturnToHomeMissionIsNotStartedIfReturnToHomeIsNotSupported()
],
OrderBy = "DesiredStartTime",
PageSize = 100
});
}, readOnly: true);
Assert.False(ongoingMission.Any());
}

Expand All @@ -317,7 +321,7 @@ public async Task MissionRunIsStartedForOtherAvailableRobotIfOneRobotHasAnOngoin
Thread.Sleep(100);

// Assert
var postStartMissionRunOne = await _missionRunService.ReadById(missionRunOne.Id);
var postStartMissionRunOne = await _missionRunService.ReadById(missionRunOne.Id, readOnly: true);
Assert.NotNull(postStartMissionRunOne);
Assert.Equal(MissionStatus.Ongoing, postStartMissionRunOne.Status);

Expand All @@ -326,7 +330,7 @@ public async Task MissionRunIsStartedForOtherAvailableRobotIfOneRobotHasAnOngoin
Thread.Sleep(100);

// Assert
var postStartMissionRunTwo = await _missionRunService.ReadById(missionRunTwo.Id);
var postStartMissionRunTwo = await _missionRunService.ReadById(missionRunTwo.Id, readOnly: true);
Assert.NotNull(postStartMissionRunTwo);
Assert.Equal(MissionStatus.Ongoing, postStartMissionRunTwo.Status);
}
Expand Down Expand Up @@ -360,7 +364,7 @@ public async Task QueuedMissionsAreAbortedWhenLocalizationFails()
Thread.Sleep(500);

// Assert
var postTestMissionRun = await _missionRunService.ReadById(missionRun1.Id);
var postTestMissionRun = await _missionRunService.ReadById(missionRun1.Id, readOnly: true);
Assert.Equal(MissionStatus.Aborted, postTestMissionRun!.Status);
}

Expand All @@ -373,7 +377,7 @@ public async Task QueuedMissionsAreNotAbortedWhenRobotAvailableHappensAtTheSameT
var deck = await _databaseUtilities.NewDeck(installation.InstallationCode, plant.PlantCode);
var area = await _databaseUtilities.NewArea(installation.InstallationCode, plant.PlantCode, deck.Name);
var robot = await _databaseUtilities.NewRobot(RobotStatus.Available, installation, null);
var missionRun1 = await _databaseUtilities.NewMissionRun(installation.InstallationCode, robot, area, true);
var missionRun1 = await _databaseUtilities.NewMissionRun(installation.InstallationCode, robot, area, true, isarMissionId: Guid.NewGuid().ToString());
Thread.Sleep(100);
var missionRun2 = await _databaseUtilities.NewMissionRun(installation.InstallationCode, robot, area, true);
Thread.Sleep(100);
Expand All @@ -400,10 +404,10 @@ public async Task QueuedMissionsAreNotAbortedWhenRobotAvailableHappensAtTheSameT
Thread.Sleep(500);

// Assert
var postTestMissionRun1 = await _missionRunService.ReadById(missionRun1.Id);
var postTestMissionRun1 = await _missionRunService.ReadById(missionRun1.Id, readOnly: true);
Assert.Equal(MissionRunType.Localization, postTestMissionRun1!.MissionRunType);
Assert.Equal(MissionStatus.Successful, postTestMissionRun1!.Status);
var postTestMissionRun2 = await _missionRunService.ReadById(missionRun2.Id);
var postTestMissionRun2 = await _missionRunService.ReadById(missionRun2.Id, readOnly: true);
Assert.Equal(MissionStatus.Pending, postTestMissionRun2!.Status);
}

Expand Down Expand Up @@ -449,10 +453,10 @@ public async Task QueuedContinuesWhenOnIsarStatusHappensAtTheSameTimeAsOnIsarMis
Thread.Sleep(2500); // Accommodate for sleep in OnIsarStatus

// Assert
var postTestMissionRun1 = await _missionRunService.ReadById(missionRun1.Id);
var postTestMissionRun1 = await _missionRunService.ReadById(missionRun1.Id, readOnly: true);
Assert.Equal(MissionRunType.Localization, postTestMissionRun1!.MissionRunType);
Assert.Equal(Api.Database.Models.TaskStatus.Successful, postTestMissionRun1!.Tasks[0].Status);
var postTestMissionRun2 = await _missionRunService.ReadById(missionRun2.Id);
var postTestMissionRun2 = await _missionRunService.ReadById(missionRun2.Id, readOnly: true);
Assert.Equal(MissionStatus.Ongoing, postTestMissionRun2!.Status);
}

Expand All @@ -476,7 +480,7 @@ public async Task LocalizationMissionCompletesAfterPressingSendToSafeZoneButton(
Thread.Sleep(1000);

// Assert
var updatedRobot = await _robotService.ReadById(robot.Id);
var updatedRobot = await _robotService.ReadById(robot.Id, readOnly: true);
Assert.True(updatedRobot?.MissionQueueFrozen);

bool isRobotLocalized = await _localizationService.RobotIsLocalized(robot.Id);
Expand Down Expand Up @@ -525,7 +529,7 @@ public async Task ReturnHomeMissionAbortedIfNewMissionScheduled()
Thread.Sleep(500);

// Assert
var updatedReturnHomeMission = await _missionRunService.ReadById(returnToHomeMission.Id);
var updatedReturnHomeMission = await _missionRunService.ReadById(returnToHomeMission.Id, readOnly: true);
Assert.True(updatedReturnHomeMission?.Status.Equals(MissionStatus.Aborted));

// Act
Expand All @@ -552,7 +556,7 @@ public async Task ReturnHomeMissionAbortedIfNewMissionScheduled()
_mqttService.RaiseEvent(nameof(MqttService.MqttIsarStatusReceived), mqttIsarStatusEventArgs);
Thread.Sleep(500);

var updatedMissionRun = await _missionRunService.ReadById(missionRun.Id);
var updatedMissionRun = await _missionRunService.ReadById(missionRun.Id, readOnly: true);
Assert.True(updatedMissionRun?.Status.Equals(MissionStatus.Ongoing));
}
}
Expand Down
5 changes: 4 additions & 1 deletion backend/api.test/Mocks/RobotControllerMock.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ internal class RobotControllerMock
public readonly Mock<IRobotModelService> RobotModelServiceMock;
public readonly Mock<IRobotService> RobotServiceMock;
public readonly Mock<IInstallationService> InstallationServiceMock;
public readonly Mock<IErrorHandlingService> ErrorHandlingServiceMock;

public RobotControllerMock()
{
Expand All @@ -22,6 +23,7 @@ public RobotControllerMock()
RobotModelServiceMock = new Mock<IRobotModelService>();
AreaServiceMock = new Mock<IAreaService>();
InstallationServiceMock = new Mock<IInstallationService>();
ErrorHandlingServiceMock = new Mock<IErrorHandlingService>();

var mockLoggerController = new Mock<ILogger<RobotController>>();

Expand All @@ -32,7 +34,8 @@ public RobotControllerMock()
MissionServiceMock.Object,
RobotModelServiceMock.Object,
AreaServiceMock.Object,
InstallationServiceMock.Object
InstallationServiceMock.Object,
ErrorHandlingServiceMock.Object
)
{
CallBase = true
Expand Down
22 changes: 19 additions & 3 deletions backend/api.test/Services/MissionService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,30 @@ public class MissionServiceTest : IDisposable
private readonly ISignalRService _signalRService;
private readonly IAccessRoleService _accessRoleService;
private readonly UserInfoService _userInfoService;
private readonly IMissionTaskService _missionTaskService;
private readonly IAreaService _areaService;
private readonly IDeckService _deckService;
private readonly IInstallationService _installationService;
private readonly IPlantService _plantService;
private readonly IRobotModelService _robotModelService;
private readonly IRobotService _robotService;

public MissionServiceTest(DatabaseFixture fixture)
{
_context = fixture.NewContext;
var defaultLocalizationPoseService = new DefaultLocalizationPoseService(_context);
_logger = new Mock<ILogger<MissionRunService>>().Object;
_signalRService = new MockSignalRService();
_accessRoleService = new AccessRoleService(_context, new HttpContextAccessor());
_userInfoService = new UserInfoService(_context, new HttpContextAccessor(), new Mock<ILogger<UserInfoService>>().Object);
_missionRunService = new MissionRunService(_context, _signalRService, _logger, _accessRoleService, _userInfoService);
_missionTaskService = new MissionTaskService(_context, new Mock<ILogger<MissionTaskService>>().Object);
_installationService = new InstallationService(_context, _accessRoleService);
_plantService = new PlantService(_context, _installationService, _accessRoleService);
_deckService = new DeckService(_context, defaultLocalizationPoseService, _installationService, _plantService, _accessRoleService, new MockSignalRService());
_areaService = new AreaService(_context, _installationService, _plantService, _deckService, defaultLocalizationPoseService, _accessRoleService);
_robotModelService = new RobotModelService(_context);
_robotService = new RobotService(_context, new Mock<ILogger<RobotService>>().Object, _robotModelService, new MockSignalRService(), _accessRoleService, _installationService, _areaService);
_missionRunService = new MissionRunService(_context, _signalRService, _logger, _accessRoleService, _missionTaskService, _areaService, _robotService, _userInfoService);
_databaseUtilities = new DatabaseUtilities(_context);
}

Expand All @@ -42,15 +57,16 @@ public void Dispose()
[Fact]
public async Task ReadIdDoesNotExist()
{
var missionRun = await _missionRunService.ReadById("some_id_that_does_not_exist");
var missionRun = await _missionRunService.ReadById("some_id_that_does_not_exist", readOnly: true);
Assert.Null(missionRun);
}

[Fact]
public async Task Create()
{
var reportsBefore = await _missionRunService.ReadAll(
new MissionRunQueryStringParameters()
new MissionRunQueryStringParameters(),
readOnly: true
);
int nReportsBefore = reportsBefore.Count;

Expand Down
Loading
Loading