Commit 0f5da44d authored by Filip Bugoš's avatar Filip Bugoš
Browse files

Merge branch 'testing_user' into 'milestone-2'

Testing user

See merge request !44
parents d4633a9d 5ec8a2b6
Loading
Loading
Loading
Loading
Loading
+18 −18
Original line number Diff line number Diff line
@@ -23,8 +23,9 @@ import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Component

@RequiredArgsConstructor
@Component
public class DataInitializer implements ApplicationRunner {
  private final UserService userService;
  private final DeviceService deviceService;
@@ -80,8 +81,18 @@ public class DataInitializer implements ApplicationRunner {
                    .build();
    userService.create(user);

    House house = House.builder()
            .address("lol")
            .city("lol")
            .state("lol")
            .zipcode("lol")
            .build();
    house.setId("b256ac78-dc47-11ed-afa1-0242ac120002");
    houseService.create(house);

    HouseRole role = HouseRole.builder()
                    .houseRole(HouseRoleEnum.Owner)
                    .house(house)
                    .build();
    role.setUser(user);
    roleService.create(role);
@@ -89,24 +100,13 @@ public class DataInitializer implements ApplicationRunner {
    Device device = Device.builder().name("device03").build();
    deviceService.create(device);

    SmartMeter smartMeter = SmartMeter.builder().name("smartMeter01").device(device).build();
    smartMeterService.create(smartMeter);

    List<SmartMeter> smartMeterList = new ArrayList<SmartMeter>();
    smartMeterList.add(smartMeter);
    ArrayList<HouseRole> owners = new ArrayList<>();
    owners.add(role);
    House house = House.builder()
            .smartMeterList(smartMeterList)
            .address("lol")
            .city("lol")
            .state("lol")
            .zipcode("lol")
            .ownerList(owners)
    SmartMeter smartMeter = SmartMeter
            .builder()
            .name("SmartMeter04")
            .device(device)
            .house(house)
            .build();
    houseService.create(house);


    smartMeterService.create(smartMeter);

    Metrics metrics = Metrics.builder()
            .consumptionKWH(10)
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ public interface UserRepository extends JpaRepository<User, String> {

	@Query("Select SUM(m.consumptionKWH) " +
			"From User u " +
			"INNER JOIN Role r " +
			"INNER JOIN HouseRole hr " +
			"INNER JOIN House h " +
			"INNER JOIN SmartMeter s " +
+310 −0
Original line number Diff line number Diff line
package cz.muni.fi.pa165.core.user;

import cz.muni.fi.pa165.core.company.Company;
import cz.muni.fi.pa165.core.device.Device;
import cz.muni.fi.pa165.core.house.House;
import cz.muni.fi.pa165.core.house.HouseService;
import cz.muni.fi.pa165.core.metrics.Metrics;
import cz.muni.fi.pa165.core.metrics.MetricsService;
import cz.muni.fi.pa165.core.smartmeter.SmartMeter;
import cz.muni.fi.pa165.core.smartmeter.SmartMeterService;
import cz.muni.fi.pa165.core.user.roles.HouseRole;
import cz.muni.fi.pa165.core.user.roles.RoleService;
import cz.muni.fi.pa165.model.dto.role.enums.HouseRoleEnum;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.openMocks;

public class UserServiceTest {
    @InjectMocks
    private UserService userService;

    @Mock
    private MetricsService metricsService;

    @Mock
    private SmartMeterService smartMeterService;

    @Mock
    private HouseService houseService;

    @Mock
    private RoleService roleService;

    @Mock
    private UserRepository userReposiroyMock;

    @BeforeEach
    void init() {
        openMocks(this);
    }

    @Test
    void shouldGetUserById() {

        User user = User
                .builder()
                .username("Test")
                .build();

        when(userReposiroyMock.findById(user.getId())).thenReturn(Optional.of(user));

        User result = userService.findById(user.getId());

        verify(userReposiroyMock).findById(user.getId());

        assertEquals(user, result);
    }

    @Test
    void shouldCreateNewDevice() {

        User user = User
                .builder()
                .username("Test")
                .build();

        when(userReposiroyMock.save(user)).thenReturn(user);

        User createdUser = userService.create(user);

        verify(userReposiroyMock).save(user);

        assertThat(createdUser).isEqualTo(user);
    }

    @Test
    void shouldFindUserByName() {

        User user = User
                .builder()
                .username("Test")
                .build();

        when(userReposiroyMock.findByUsername(user.getUsername())).thenReturn(Optional.of(user));

        User result = userService.findByUsername(user.getUsername());

        verify(userReposiroyMock).findByUsername(user.getUsername());

        assertEquals(user, result);
    }

    @Test
    void shouldFindAllUserPageableInt() {

        User user1 = User
                .builder()
                .username("Test")
                .build();

        User user2 = User
                .builder()
                .username("Test2")
                .build();

        Page<User> page = new PageImpl<>(List.of(user1, user2));

        int pageNumber = 0;
        int pageSize = 10;

        when(userReposiroyMock.findAll(PageRequest.of(pageNumber, pageSize))).thenReturn(page);

        Page<User> result = userService.findAllPageableInt(pageNumber);

        verify(userReposiroyMock).findAll(PageRequest.of(pageNumber, pageSize));

        assertThat(result).containsExactlyInAnyOrder(user1, user2);
    }

    @Test
    void shouldDeleteUserById() {

        User user = User
                .builder()
                .username("Test")
                .build();

        when(userReposiroyMock.findById(user.getId())).thenReturn(Optional.of(user));

        User deletedUser = userService.deleteById(user.getId());

        verify(userReposiroyMock).findById(user.getId());
        verify(userReposiroyMock).save(user); // soft delete

        assertNotNull(deletedUser.getDeletedDateTime());
        assertEquals(user, deletedUser);
    }

    @Test
    void shouldUpdateUser() {

        User originalUser = User
                .builder()
                .username("Test1")
                .build();

        User updatedUser = User
                .builder()
                .username("Test2")
                .build();

        when(userReposiroyMock.findById(originalUser.getId())).thenReturn(Optional.of(originalUser));

        when(userReposiroyMock.save(updatedUser)).thenReturn(updatedUser);

        User result = userService.update(updatedUser, originalUser.getId());

        verify(userReposiroyMock).findById(originalUser.getId());
        verify(userReposiroyMock).save(updatedUser);

        assertEquals(originalUser.getId(), result.getId());
        assertEquals(updatedUser.getUsername(), result.getUsername());
    }

    @Test
    void shouldHardDeleteAllUsers() {
        userService.hardDeleteAll();
        verify(userReposiroyMock).deleteAll();
    }

    @Test
    void shouldDeleteAllUsers() {
        var data = List.of(
                User.builder().username("Test1").build(),
                User.builder().username("Test2").build()
        );
        when(userReposiroyMock.findAll()).thenReturn(data);
        userService.deleteAll();
        verify(userReposiroyMock).findAll();
        verify(userReposiroyMock).saveAll(data);
    }

    @Test
    void shouldDeleteAllUsersIds() {
        User firstUser = User
                .builder()
                .username("Test1")
                .build();

        User secondUser = User
                .builder()
                .username("Test2")
                .build();

        String[] ids = {firstUser.getId(), secondUser.getId()};
        when(userReposiroyMock.findById(ids[0])).thenReturn(Optional.of(firstUser));
        when(userReposiroyMock.findById(ids[1])).thenReturn(Optional.of(secondUser));

        userService.deleteAllById(ids);

        verify(userReposiroyMock).save(firstUser);
        verify(userReposiroyMock).save(secondUser);
    }

    @Test
    void shouldFindAllUsers() {
        var data = List.of(
                User.builder().username("Test1").build(),
                User.builder().username("Test2").build()
        );

        when(userReposiroyMock.findAll()).thenReturn(data);
        List<User> result = userService.findAll();
        verify(userReposiroyMock).findAll();
        assertEquals(data, result);
    }

    @Test
    void shouldFindAllUsersPageable() {
        int pageNumber = 0;
        int pageSize = 10;
        Pageable pageable = PageRequest.of(pageNumber, pageSize);

        var data = List.of(
                User.builder().username("Test1").build(),
                User.builder().username("Test2").build()
        );

        Page<User> pageResult = new PageImpl<>(data, pageable, data.size());
        when(userReposiroyMock.findAll(pageable)).thenReturn(pageResult);

        Page<User> result = userService.findAllPageable(pageable);
        verify(userReposiroyMock).findAll(pageable);

        assertEquals(pageResult, result);
    }

    @Test
    void shouldReturnUserMonthConsumption() {
        User user =
                User.builder()
                        .email("test@gmail.com")
                        .firstName("lol")
                        .lastName("lol")
                        .username("lol")
                        .password("lol")
                        .userType(UserType.ADMIN)
                        .build();
        user.setId("6a9f853d-59ef-4636-9c0b-bbac44bfd7f4");
        userService.create(user);

        House house = House.builder()
                .address("lol")
                .city("lol")
                .state("lol")
                .zipcode("lol")
                .build();
        house.setId("b256ac78-dc47-11ed-afa1-0242ac120002");
        houseService.create(house);

        HouseRole role = HouseRole.builder()
                .houseRole(HouseRoleEnum.Owner)
                .house(house)
                .build();
        role.setUser(user);
        roleService.create(role);

        SmartMeter smartMeter = SmartMeter
                .builder()
                .house(house)
                .build();
        smartMeterService.create(smartMeter);

        LocalDateTime date = LocalDateTime.of(2023,
                1,15,0,0,0,0);

        double consumptionSeed = 0;
        Metrics metrics = Metrics.builder()
                .consumptionKWH(consumptionSeed)
                .timeStamp(date)
                .smartMeter(smartMeter)
                .build();
        metricsService.create(metrics);

        double consumption = userService.getConsumption(user.getId(), house.getId(),
                LocalDateTime.of(2023, 1,1,0,0,0,0),
                LocalDateTime.of(2023, 1,31,0,0,0,0));

        assertEquals(consumptionSeed, consumption);

    }
}
+6 −13
Original line number Diff line number Diff line
package cz.muni.fi.pa165.statistics.statistics;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.HttpClientBuilder;
@@ -12,12 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

@@ -35,7 +28,7 @@ public class StatisticService {
    }

    @Transactional
    public UserStatistic CreateStatistic(UserStatistic userStatistic) throws IOException {
    public UserStatistic createStatistic(UserStatistic userStatistic) throws IOException {
        UserStatistic statistic = repository.findUserHouseDateStatistics(userStatistic.getUserId(), userStatistic.getHouseId(), userStatistic.getMonthNum(), userStatistic.getYearNum());

        if (statistic == null){
@@ -45,7 +38,7 @@ public class StatisticService {
                    userStatistic.getHouseId(),
                    userStatistic.getMonthNum(),
                    userStatistic.getYearNum()));
            userStatistic.setMonthlyConsumption(GenerateStatistic(userStatistic));
            userStatistic.setMonthlyConsumption(generateStatistic(userStatistic));
            repository.save(userStatistic);
            return userStatistic;
        }
@@ -65,7 +58,7 @@ public class StatisticService {
        return repository.findAllByUserAndHouse(userId, houseId);
    }

    private double GenerateStatistic(UserStatistic userStatistic) throws IOException {
    public double generateStatistic(UserStatistic userStatistic) throws IOException {

        LocalDateTime startDateTime = GetFirstDayOfMonth(userStatistic.getYearNum(), userStatistic.getMonthNum());
        LocalDateTime lastDateTime = GetLastDayOfMonth(userStatistic.getYearNum(), userStatistic.getMonthNum());
@@ -102,12 +95,12 @@ public class StatisticService {
    private LocalDateTime GetLastDayOfMonth(int year, int month){
        LocalDateTime date = LocalDateTime.of(year,
                month,1,0,0,0,0);
        date.plusMonths(1);
        date.minusDays(1);
        LocalDateTime date_pom = date.plusMonths(1);
        LocalDateTime lastDateOfMonth = date_pom.minusDays(1);

        return LocalDateTime.of(year,
                month,
                date.getDayOfMonth(),
                lastDateOfMonth.getDayOfMonth(),
                23,59,59,999999);
    }

+1 −3
Original line number Diff line number Diff line
package cz.muni.fi.pa165.statistics.statistics;

import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestParam;

import java.io.IOException;
import java.util.List;
@@ -24,7 +22,7 @@ public class StatisticsFacade {

    @Transactional
    public UserStatisticsDto CreateStatistics(StatisticCreateDto entity) throws IOException {
        return mapper.toDto(statisticService.CreateStatistic(mapper.fromDto(entity)));
        return mapper.toDto(statisticService.createStatistic(mapper.fromDto(entity)));
    }

    @Transactional