Untitled

mail@pastecode.io avatar
unknown
java
a year ago
4.0 kB
24
Indexable
package com.example.servicesprovider.base.service.impl;

import com.example.servicesprovider.base.model.BaseModel;
import com.example.servicesprovider.base.repository.BaseRepository;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.junit.jupiter.api.extension.ExtendWith;

import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.util.*;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class BaseServiceImplTest {
    @InjectMocks
    private TestServiceImpl baseService;

    @Mock
    private TestRepository testRepository;

    @Mock
    private Validator validator;

    @Test
    void saveValidModel() {
        TestModel testModel = new TestModel();
        when(validator.validate(testModel)).thenReturn(Collections.emptySet());
        when(testRepository.save(testModel)).thenReturn(testModel);

        TestModel savedModel = baseService.save(testModel);

        assertNotNull(savedModel);
        verify(testRepository, times(1)).save(testModel);
    }

    @Test
    void saveInvalidModel() {
        TestModel testModel = new TestModel();
        when(validator.validate(testModel)).thenReturn(Set.of(Mockito.mock(ConstraintViolation.class)));

        TestModel savedModel = baseService.save(testModel);

        assertNull(savedModel);
        verify(testRepository, never()).save(testModel);
    }

    @Test
    void updateValidModel() {
        TestModel testModel = new TestModel();
        when(validator.validate(testModel)).thenReturn(Collections.emptySet());
        when(testRepository.save(testModel)).thenReturn(testModel);

        TestModel updatedModel = baseService.update(testModel);

        assertNotNull(updatedModel);
        verify(testRepository, times(1)).save(testModel);
    }

    @Test
    void updateInvalidModel() {
        TestModel testModel = new TestModel();
        when(validator.validate(testModel)).thenReturn(Set.of(Mockito.mock(ConstraintViolation.class)));

        TestModel updatedModel = baseService.update(testModel);

        assertNotNull(updatedModel);
        verify(testRepository, never()).save(testModel);
    }

    @Test
    void deleteModel() {
        TestModel testModel = new TestModel();
        baseService.delete(testModel);

        verify(testRepository, times(1)).delete(testModel);
    }

    @Test
    void findByIdValid() {
        Long id = 1L;
        TestModel testModel = new TestModel();
        when(testRepository.findById(id)).thenReturn(Optional.of(testModel));

        TestModel foundModel = baseService.findById(id);

        assertNotNull(foundModel);
        verify(testRepository, times(1)).findById(id);
    }

    @Test
    void findAll() {
        List<TestModel> modelList = Arrays.asList(new TestModel(), new TestModel());
        when(testRepository.findAll()).thenReturn(modelList);

        List<TestModel> foundModels = baseService.findAll();

        assertEquals(modelList.size(), foundModels.size());
        verify(testRepository, times(1)).findAll();
    }

    @Test
    void existsById() {
        Long id = 1L;
        when(testRepository.existsById(id)).thenReturn(true);

        assertTrue(baseService.existsById(id));
        verify(testRepository, times(1)).existsById(id);
    }

    private static class TestModel extends BaseModel<Long> {
    }

    private interface TestRepository extends BaseRepository<TestModel, Long> {
    }

    private static class TestServiceImpl extends BaseServiceImpl<TestModel, Long, TestRepository> {
        public TestServiceImpl(TestRepository repository, Validator validator) {
            super(repository, validator);
        }
    }
}