ARTICLE AD BOX
I’m working on a Java Swing project (Udacity UdaSecurity) enter image description hereCan someone please help me fix this issue as fast as possible? If there are any files needed I will share. //securityservicetest.java
package com.udacity.catpoint.service; import com.udacity.catpoint.data.*; import com.udacity.catpoint.image.ImageService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.awt.image.BufferedImage; import java.util.HashSet; import java.util.Set; import static org.mockito.Mockito.*; public class SecurityServiceTest { @Mock private SecurityRepository securityRepository; @Mock private ImageService imageService; private SecurityService securityService; @BeforeEach void setup() { MockitoAnnotations.openMocks(this); securityService = new SecurityService(securityRepository, imageService); } @Test void whenSystemArmedAndSensorActivated_alarmBecomesPending() { Sensor sensor = new Sensor("S1", SensorType.DOOR); when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_AWAY); when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.NO_ALARM); securityService.changeSensorActivationStatus(sensor, true); verify(securityRepository).setAlarmStatus(AlarmStatus.PENDING_ALARM); } @Test void whenPendingAlarmAndAnotherSensorActivated_alarmBecomesAlarm() { Sensor sensor = new Sensor("S1", SensorType.DOOR); when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_AWAY); when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.PENDING_ALARM); securityService.changeSensorActivationStatus(sensor, true); verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM); } @Test void whenSensorDeactivatedAndAlarmPending_alarmBecomesNoAlarm() { Sensor sensor = new Sensor("S1", SensorType.DOOR); sensor.setActive(true); when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.PENDING_ALARM); securityService.changeSensorActivationStatus(sensor, false); verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM); } @Test void whenAlarmAlreadyActive_sensorChangeDoesNotAffectAlarm() { Sensor sensor = new Sensor("S1", SensorType.DOOR); when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM); securityService.changeSensorActivationStatus(sensor, true); verify(securityRepository, never()).setAlarmStatus(any()); } @Test void whenAlarmActive_newSensorActivated_alarmStaysAlarm() { when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM); Sensor sensor = new Sensor("S2", SensorType.WINDOW); securityService.changeSensorActivationStatus(sensor, true); verify(securityRepository, never()).setAlarmStatus(any()); } @Test void whenAlarmActive_sensorDeactivated_alarmStaysAlarm() { when(securityRepository.getAlarmStatus()).thenReturn(AlarmStatus.ALARM); Sensor sensor = new Sensor("S1", SensorType.DOOR); sensor.setActive(true); securityService.changeSensorActivationStatus(sensor, false); verify(securityRepository, never()).setAlarmStatus(any()); } @Test void whenCatDetected_andArmedHome_alarmStaysAlarmRegardlessOfSensors() { when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(true); when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_HOME); securityService.processImage(mock(BufferedImage.class)); verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM); } @Test void whenNoCatDetectedAndSensorsInactive_alarmBecomesNoAlarm() { when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(false); when(securityRepository.getSensors()).thenReturn(new HashSet<>()); securityService.processImage(mock(BufferedImage.class)); verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM); } @Test void whenSystemDisarmed_alarmIsSetToNoAlarm() { securityService.setArmingStatus(ArmingStatus.DISARMED); verify(securityRepository).setAlarmStatus(AlarmStatus.NO_ALARM); } @ParameterizedTest @EnumSource(value = ArmingStatus.class, names = {"ARMED_HOME", "ARMED_AWAY"}) void whenSystemArmed_allSensorsAreResetToInactive(ArmingStatus status) { Set<Sensor> sensors = new HashSet<>(); Sensor s1 = new Sensor("S1", SensorType.DOOR); s1.setActive(true); sensors.add(s1); when(securityRepository.getSensors()).thenReturn(sensors); securityService.setArmingStatus(status); sensors.forEach(s -> { assert !s.getActive(); }); } @Test void whenArmedHomeAndCatDetected_verifyAlarmStatus() { when(securityRepository.getArmingStatus()).thenReturn(ArmingStatus.ARMED_HOME); when(imageService.imageContainsCat(any(), anyFloat())).thenReturn(true); securityService.processImage(mock(BufferedImage.class)); verify(securityRepository).setAlarmStatus(AlarmStatus.ALARM); } @ParameterizedTest @EnumSource(AlarmStatus.class) void whenInactiveSensorDeactivated_alarmStateNeverChanges(AlarmStatus status) { Sensor sensor = new Sensor("S1", SensorType.DOOR); sensor.setActive(false); when(securityRepository.getAlarmStatus()).thenReturn(status); securityService.changeSensorActivationStatus(sensor, false); verify(securityRepository, never()).setAlarmStatus(any()); } } //securityservice.java package com.udacity.catpoint.service; import com.udacity.catpoint.application.StatusListener; import com.udacity.catpoint.data.AlarmStatus; import com.udacity.catpoint.data.ArmingStatus; import com.udacity.catpoint.data.SecurityRepository; import com.udacity.catpoint.data.Sensor; import com.udacity.catpoint.image.ImageService; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class SecurityService { private final SecurityRepository securityRepository; private final ImageService imageService; private final Set<StatusListener> statusListeners = new HashSet<>(); public SecurityService(SecurityRepository securityRepository, ImageService imageService) { this.securityRepository = securityRepository; this.imageService = imageService; } public void setArmingStatus(ArmingStatus armingStatus) { if (armingStatus == ArmingStatus.DISARMED) { setAlarmStatus(AlarmStatus.NO_ALARM); } else { // Requirement 10: Reset all sensors to inactive without crashing List<Sensor> sensors = new ArrayList<>(securityRepository.getSensors()); sensors.forEach(sensor -> { sensor.setActive(false); securityRepository.updateSensor(sensor); }); } securityRepository.setArmingStatus(armingStatus); } public void changeSensorActivationStatus(Sensor sensor, Boolean active) { if (securityRepository.getAlarmStatus() != AlarmStatus.ALARM) { if (active) { handleSensorActivated(); } else if (sensor.getActive() && !active) { handleSensorDeactivated(); } } sensor.setActive(active); securityRepository.updateSensor(sensor); } private void handleSensorActivated() { if (securityRepository.getArmingStatus() == ArmingStatus.DISARMED) return; AlarmStatus currentStatus = securityRepository.getAlarmStatus(); if (currentStatus == AlarmStatus.NO_ALARM) { setAlarmStatus(AlarmStatus.PENDING_ALARM); } else if (currentStatus == AlarmStatus.PENDING_ALARM) { setAlarmStatus(AlarmStatus.ALARM); } } private void handleSensorDeactivated() { if (securityRepository.getAlarmStatus() == AlarmStatus.PENDING_ALARM) { setAlarmStatus(AlarmStatus.NO_ALARM); } } public void processImage(BufferedImage image) { boolean catDetected = imageService.imageContainsCat(image, 50.0f); // Requirement 11: Set alarm if cat detected while ANY Armed state is active if (catDetected && (getArmingStatus() == ArmingStatus.ARMED_HOME || getArmingStatus() == ArmingStatus.ARMED_AWAY)) { setAlarmStatus(AlarmStatus.ALARM); } // Requirement 9: Reset to no alarm if no cat and sensors are off else if (!catDetected && allSensorsInactive()) { setAlarmStatus(AlarmStatus.NO_ALARM); } statusListeners.forEach(listener -> listener.catDetected(catDetected)); } private boolean allSensorsInactive() { return securityRepository.getSensors().stream().noneMatch(Sensor::getActive); } public void setAlarmStatus(AlarmStatus status) { securityRepository.setAlarmStatus(status); statusListeners.forEach(listener -> listener.notify(status)); } public ArmingStatus getArmingStatus() { return securityRepository.getArmingStatus(); } public AlarmStatus getAlarmStatus() { return securityRepository.getAlarmStatus(); } public void addStatusListener(StatusListener listener) { statusListeners.add(listener); } public void removeStatusListener(StatusListener listener) { statusListeners.remove(listener); } public Set<Sensor> getSensors() { return securityRepository.getSensors(); } public void addSensor(Sensor sensor) { securityRepository.addSensor(sensor); } public void removeSensor(Sensor sensor) { securityRepository.removeSensor(sensor); } }