Merge branch 'tests' into 'dev'

Code smells fix

See merge request sa4-2020/the-sanmarinoes/backend!174
This commit is contained in:
Claudio Maggioni 2020-05-24 12:18:53 +02:00
commit 784574086b
21 changed files with 89 additions and 42 deletions

View file

@ -70,7 +70,7 @@ public class ButtonDimmerController
deviceService.saveAllAsOwner(buttonDimmer.getOutputs(), principal.getName());
return buttonDimmer.getOutputs();
return buttonDimmer.getDimmables();
}
@DeleteMapping("/{id}")

View file

@ -96,8 +96,8 @@ public abstract class InputDeviceConnectionController<
* @return the list of output devices attached to the input device of id inputId
* @throws NotFoundException if inputId or outputId are not valid
*/
protected Set<? extends OutputDevice> addOutput(
Long inputId, List<Long> outputs, String username) throws NotFoundException {
protected Set<OutputDevice> addOutput(Long inputId, List<Long> outputs, String username)
throws NotFoundException {
final Connection pair = checkConnectionIDs(inputId, outputs, username);
for (final O o : pair.getOutputs()) {
@ -116,8 +116,8 @@ public abstract class InputDeviceConnectionController<
* @return the list of output devices attached to the input device of id inputId
* @throws NotFoundException if inputId or outputId are not valid
*/
protected Set<? extends OutputDevice> removeOutput(
Long inputId, List<Long> outputs, String username) throws NotFoundException {
protected Set<OutputDevice> removeOutput(Long inputId, List<Long> outputs, String username)
throws NotFoundException {
final Connection pair = checkConnectionIDs(inputId, outputs, username);
for (final O o : pair.getOutputs()) {

View file

@ -62,7 +62,7 @@ public class KnobDimmerController extends InputDeviceConnectionController<KnobDi
dimmer.setLightIntensity(bd.getIntensity());
deviceService.saveAllAsOwner(dimmer.getOutputs(), principal.getName());
return dimmer.getOutputs();
return dimmer.getDimmables();
}
@DeleteMapping("/{id}")

View file

@ -77,7 +77,7 @@ public class SwitchController extends InputDeviceConnectionController<Switch, Sw
}
deviceService.saveAsOwner(s, principal.getName());
return deviceService.saveAllAsOwner(s.getOutputs(), principal.getName());
return deviceService.saveAllAsOwner(s.getSwitchables(), principal.getName());
}
@DeleteMapping("/{id}")

View file

@ -1,6 +1,7 @@
package ch.usi.inf.sa4.sanmarinoes.smarthut.dto.automation;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.Trigger;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.Triggerable;
import javax.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@ -8,5 +9,5 @@ import lombok.Setter;
public abstract class TriggerDTO {
@NotNull @Getter @Setter private long deviceId;
public abstract Trigger<?> toModel();
public abstract Trigger<? extends Triggerable> toModel();
}

View file

@ -18,14 +18,14 @@ public class ButtonDimmer extends Dimmer {
/** Increases the current intensity level of the dimmable light by DIM_INCREMENT */
public void increaseIntensity() {
for (Dimmable dl : getOutputs()) {
for (Dimmable dl : getDimmables()) {
dl.setIntensity(dl.getIntensity() + DIM_INCREMENT);
}
}
/** Decreases the current intensity level of the dimmable light by DIM_INCREMENT */
public void decreaseIntensity() {
for (Dimmable dl : getOutputs()) {
for (Dimmable dl : getDimmables()) {
dl.setIntensity(dl.getIntensity() - DIM_INCREMENT);
}
}

View file

@ -1,6 +1,7 @@
package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
import java.util.Date;
import java.util.Objects;
import java.util.UUID;
import javax.persistence.*;
import lombok.Data;
@ -43,4 +44,21 @@ public class ConfirmationToken {
confirmToken = UUID.randomUUID().toString();
resetPassword = false;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ConfirmationToken that = (ConfirmationToken) o;
return resetPassword == that.resetPassword
&& Objects.equals(id, that.id)
&& confirmToken.equals(that.confirmToken)
&& createdDate.equals(that.createdDate)
&& Objects.equals(user, that.user);
}
@Override
public int hashCode() {
return Objects.hash(id, confirmToken, createdDate, user, resetPassword);
}
}

View file

@ -23,6 +23,7 @@ public class Dimmable extends Switchable implements RangeTriggerable {
@ManyToMany(mappedBy = "dimmables", cascade = CascadeType.DETACH)
@GsonExclude
@SocketGsonExclude
@EqualsAndHashCode.Exclude
@Getter
@Setter
private Set<Dimmer> dimmers = new HashSet<>();

View file

@ -6,6 +6,7 @@ import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
import lombok.EqualsAndHashCode;
import lombok.Getter;
/** Represents a generic dimmer input device */
@Entity
@ -20,6 +21,7 @@ public abstract class Dimmer extends InputDevice implements Connectable<Dimmable
@GsonExclude
@SocketGsonExclude
@EqualsAndHashCode.Exclude
@Getter
@JoinTable(
name = "dimmer_dimmable",
joinColumns = @JoinColumn(name = "dimmer_id"),
@ -32,8 +34,8 @@ public abstract class Dimmer extends InputDevice implements Connectable<Dimmable
* @return duh
*/
@Override
public Set<Dimmable> getOutputs() {
return this.dimmables;
public Set<OutputDevice> getOutputs() {
return Set.copyOf(this.dimmables);
}
/** Add a light to be controller by this dimmer */
@ -44,10 +46,10 @@ public abstract class Dimmer extends InputDevice implements Connectable<Dimmable
public void connect(Dimmable output, boolean connect) {
if (connect) {
output.getDimmers().add(this);
getOutputs().add(output);
dimmables.add(output);
} else {
output.getDimmers().remove(this);
getOutputs().remove(output);
dimmables.remove(output);
}
}
}

View file

@ -16,7 +16,7 @@ public abstract class InputDevice extends Device {
super(kind, FlowType.INPUT);
}
public Set<? extends OutputDevice> getOutputs() {
public Set<OutputDevice> getOutputs() {
return Set.of();
}
}

View file

@ -25,7 +25,7 @@ public class KnobDimmer extends Dimmer implements RangeTriggerable {
*/
public void setLightIntensity(int intensity) {
this.intensity = intensity;
for (Dimmable dl : getOutputs()) {
for (Dimmable dl : getDimmables()) {
dl.setIntensity(intensity);
}
}

View file

@ -6,6 +6,7 @@ import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
import lombok.EqualsAndHashCode;
import lombok.Getter;
/** A switch input device */
@Entity
@ -22,6 +23,7 @@ public class Switch extends InputDevice implements BooleanTriggerable, Connectab
@GsonExclude
@SocketGsonExclude
@EqualsAndHashCode.Exclude
@Getter
@JoinTable(
name = "switch_switchable",
joinColumns = @JoinColumn(name = "switch_id"),
@ -64,17 +66,17 @@ public class Switch extends InputDevice implements BooleanTriggerable, Connectab
}
@Override
public Set<Switchable> getOutputs() {
return switchables;
public Set<OutputDevice> getOutputs() {
return Set.copyOf(switchables);
}
public void connect(Switchable output, boolean connect) {
if (connect) {
output.getSwitches().add(this);
getOutputs().add(output);
switchables.add(output);
} else {
output.getSwitches().remove(this);
getOutputs().remove(output);
switchables.remove(output);
}
}

View file

@ -3,6 +3,7 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.models;
import ch.usi.inf.sa4.sanmarinoes.smarthut.config.GsonExclude;
import ch.usi.inf.sa4.sanmarinoes.smarthut.config.SocketGsonExclude;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import javax.persistence.*;
@ -55,4 +56,18 @@ public abstract class Switchable extends OutputDevice {
newState.setOn(isOn());
return newState;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
Switchable that = (Switchable) o;
return isOn() == that.isOn();
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), isOn());
}
}

View file

@ -21,15 +21,15 @@ public class AutomationService {
this.conditionRepository = conditionRepository;
}
public List<Trigger<?>> findTriggersByDeviceId(Long deviceId) {
return triggerRepository.findAllByDeviceId(deviceId);
public void findTriggersByDeviceId(Long deviceId, List<Trigger<?>> toPut) {
toPut.addAll(triggerRepository.findAllByDeviceId(deviceId));
}
public Automation findByVerifiedId(Long automationId) {
return automationRepository.findById(automationId).orElseThrow();
}
public List<Condition<?>> findAllConditionsByAutomationId(Long automationId) {
return conditionRepository.findAllByAutomationId(automationId);
public void findAllConditionsByAutomationId(Long automationId, List<Condition<?>> toPut) {
toPut.addAll(conditionRepository.findAllByAutomationId(automationId));
}
}

View file

@ -4,6 +4,7 @@ import static ch.usi.inf.sa4.sanmarinoes.smarthut.utils.Utils.toList;
import ch.usi.inf.sa4.sanmarinoes.smarthut.error.NotFoundException;
import ch.usi.inf.sa4.sanmarinoes.smarthut.models.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.List;
@ -52,7 +53,8 @@ public class DeviceService {
public void triggerTriggers(Device device, final String username) {
final long deviceId = device.getId();
final List<Trigger<?>> triggers = automationService.findTriggersByDeviceId(deviceId);
final List<Trigger<?>> triggers = new ArrayList<>();
automationService.findTriggersByDeviceId(deviceId, triggers);
triggers.stream()
.filter(Trigger::triggered)
@ -61,8 +63,9 @@ public class DeviceService {
.distinct()
.filter(
a -> {
final List<Condition<?>> conditions =
automationService.findAllConditionsByAutomationId(a.getId());
final List<Condition<?>> conditions = new ArrayList<>();
automationService.findAllConditionsByAutomationId(
a.getId(), conditions);
if (conditions.isEmpty()) return true;
return conditions.stream().allMatch(Condition::triggered);
})

View file

@ -98,7 +98,7 @@ public class SwitchControllerTests {
ArrayList<Switchable> helper = new ArrayList<Switchable>();
helper.add(light);
helper.add(light2);
when(deviceService.saveAllAsOwner(aSwitch.getOutputs(), principal.getName()))
when(deviceService.saveAllAsOwner(aSwitch.getSwitchables(), principal.getName()))
.thenReturn(helper);
MockHttpServletRequest request = new MockHttpServletRequest();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
@ -123,7 +123,7 @@ public class SwitchControllerTests {
ArrayList<Switchable> helper = new ArrayList<Switchable>();
helper.add(light);
helper.add(light2);
when(deviceService.saveAllAsOwner(aSwitch.getOutputs(), principal.getName()))
when(deviceService.saveAllAsOwner(aSwitch.getSwitchables(), principal.getName()))
.thenReturn(helper);
MockHttpServletRequest request = new MockHttpServletRequest();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
@ -148,7 +148,7 @@ public class SwitchControllerTests {
ArrayList<Switchable> helper = new ArrayList<Switchable>();
helper.add(light);
helper.add(light2);
when(deviceService.saveAllAsOwner(aSwitch.getOutputs(), principal.getName()))
when(deviceService.saveAllAsOwner(aSwitch.getSwitchables(), principal.getName()))
.thenReturn(helper);
MockHttpServletRequest request = new MockHttpServletRequest();
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));

View file

@ -39,7 +39,7 @@ public class ButtonDimmerTests {
@DisplayName(" increase the intensity ")
public void increase() {
buttonDimmer.increaseIntensity();
for (Dimmable dl : buttonDimmer.getOutputs()) {
for (Dimmable dl : buttonDimmer.getDimmables()) {
assertTrue(dl.getIntensity() > 10);
}
}
@ -48,7 +48,7 @@ public class ButtonDimmerTests {
@DisplayName(" decrease the intensity ")
public void decrease() {
buttonDimmer.decreaseIntensity();
for (Dimmable dl : buttonDimmer.getOutputs()) {
for (Dimmable dl : buttonDimmer.getDimmables()) {
assertTrue(dl.getIntensity() < 10);
}
}

View file

@ -34,12 +34,13 @@ public class DimmerTests {
@DisplayName("connect off")
public void connectOff() {
DimmableLight d = new DimmableLight();
d.setId(35L);
d.getDimmers().add(this.dimmer);
dimmer.getOutputs().add(d);
dimmer.getDimmables().add(d);
dimmer.connect(d, false);
assertFalse(d.getDimmers().contains((this.dimmer)));
assertFalse((this.dimmer.getOutputs().contains(d)));
assertFalse(this.dimmer.getOutputs().contains(d));
}
}

View file

@ -39,7 +39,7 @@ public class KnobDimmerTests {
@DisplayName(" set the intensity ")
public void increase() {
knobDimmer.setLightIntensity(30);
for (Dimmable dl : knobDimmer.getOutputs()) {
for (Dimmable dl : knobDimmer.getDimmables()) {
assertEquals(30, dl.getIntensity());
}
}

View file

@ -20,9 +20,9 @@ public class SwitchTests {
RegularLight regularLight = new RegularLight();
DimmableLight dimmableLight = new DimmableLight();
SmartPlug smartPlug = new SmartPlug();
this.aSwitch.getOutputs().add(regularLight);
this.aSwitch.getOutputs().add(dimmableLight);
this.aSwitch.getOutputs().add(smartPlug);
this.aSwitch.getSwitchables().add(regularLight);
this.aSwitch.getSwitchables().add(dimmableLight);
this.aSwitch.getSwitchables().add(smartPlug);
}
@Test
@ -80,7 +80,7 @@ public class SwitchTests {
@DisplayName("Checks that toggling on sets all elements of the Set on as well")
public void toggleEffctOnSet() {
aSwitch.toggle();
for (final Switchable s : aSwitch.getOutputs()) {
for (final Switchable s : aSwitch.getSwitchables()) {
assertTrue(s.isOn());
}
}
@ -90,7 +90,7 @@ public class SwitchTests {
public void toggleOffEffectOnElementes() {
aSwitch.setOn(true);
aSwitch.toggle();
for (final Switchable s : aSwitch.getOutputs()) {
for (final Switchable s : aSwitch.getSwitchables()) {
assertFalse(s.isOn());
}
}

View file

@ -98,8 +98,12 @@ public class DeviceServiceTests {
a.getScenes().add(sp);
when(automationService.findTriggersByDeviceId(1L)).thenReturn(List.of(b));
when(automationService.findAllConditionsByAutomationId(5L)).thenReturn(List.of(c));
doAnswer(i -> ((List<Trigger<?>>) i.getArgument(1)).add(b))
.when(automationService)
.findTriggersByDeviceId(eq(1L), any());
doAnswer(i -> ((List<Condition<?>>) i.getArgument(1)).add(c))
.when(automationService)
.findAllConditionsByAutomationId(eq(5L), any());
when(automationService.findByVerifiedId(5L)).thenReturn(a);
when(sceneService.findByValidatedId(4L)).thenReturn(s);