Advertisement
Altair200333

Untitled

Oct 23rd, 2022
884
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.05 KB | None | 0 0
  1. package org.nsu.fit.tm_backend.impl;
  2.  
  3. import org.junit.jupiter.api.Test;
  4. import org.junit.jupiter.api.extension.ExtendWith;
  5. import org.mockito.InjectMocks;
  6. import org.mockito.Mock;
  7. import org.mockito.Mockito;
  8. import org.mockito.junit.jupiter.MockitoExtension;
  9. import org.nsu.fit.tm_backend.repository.Repository;
  10. import org.nsu.fit.tm_backend.repository.data.CustomerPojo;
  11. import org.nsu.fit.tm_backend.repository.data.SubscriptionPojo;
  12. import org.nsu.fit.tm_backend.service.CustomerService;
  13. import org.nsu.fit.tm_backend.service.SubscriptionService;
  14. import org.nsu.fit.tm_backend.service.data.StatisticBO;
  15. import org.nsu.fit.tm_backend.service.data.StatisticPerCustomerBO;
  16. import org.nsu.fit.tm_backend.service.impl.CustomerServiceImpl;
  17. import org.nsu.fit.tm_backend.service.impl.StatisticServiceImpl;
  18.  
  19. import javax.inject.Inject;
  20.  
  21. import java.util.*;
  22.  
  23. import static org.junit.jupiter.api.Assertions.assertEquals;
  24. import static org.junit.jupiter.api.Assertions.assertTrue;
  25. import static org.mockito.Mockito.*;
  26.  
  27. // Лабораторная 2: покрыть unit тестами класс StatisticServiceImpl на 100%.
  28. // Чтобы протестировать метод calculate() используйте Mockito.spy(statisticService) и переопределите метод
  29. // calculate(UUID customerId) чтобы использовать стратегию "разделяй и властвуй".
  30. @ExtendWith(MockitoExtension.class)
  31. public class StatisticServiceImplTest {
  32.     @Mock
  33.     private CustomerService customerService;
  34.  
  35.     @Mock
  36.     private SubscriptionService subscriptionService;
  37.  
  38.     @InjectMocks
  39.     private StatisticServiceImpl statisticService;
  40.  
  41.     CustomerPojo createMockCustomer(int balance) {
  42.         CustomerPojo createCustomerInput = new CustomerPojo();
  43.         createCustomerInput.firstName = "John";
  44.         createCustomerInput.lastName = "Wick";
  45.         createCustomerInput.login = "john_wick@example.com";
  46.         createCustomerInput.pass = "Baba_Jaga";
  47.         createCustomerInput.balance = balance;
  48.         return createCustomerInput;
  49.     }
  50.  
  51.     List<SubscriptionPojo> generateSubscriptions() {
  52.         ArrayList<SubscriptionPojo> pojos = new ArrayList<>();
  53.         SubscriptionPojo pojo1 = new SubscriptionPojo();
  54.         pojo1.planFee = 10;
  55.         pojo1.id = UUID.randomUUID();
  56.  
  57.         SubscriptionPojo pojo2 = new SubscriptionPojo();
  58.         pojo2.planFee = 5;
  59.         pojo2.id = UUID.randomUUID();
  60.  
  61.         pojos.add(pojo1);
  62.         pojos.add(pojo2);
  63.         return pojos;
  64.     }
  65.  
  66.     @Test
  67.     void TestCalculateByUUID() {
  68.         List<SubscriptionPojo> subscriptions = generateSubscriptions();
  69.         CustomerPojo sampleOutput = createMockCustomer(10);
  70.         sampleOutput.id = UUID.randomUUID();
  71.  
  72.         when(customerService.lookupCustomer(sampleOutput.id)).thenReturn(sampleOutput);
  73.         when(subscriptionService.getSubscriptions(sampleOutput.id)).thenReturn(subscriptions);
  74.  
  75.         StatisticPerCustomerBO output = statisticService.calculate(sampleOutput.id);
  76.  
  77.         // assert: проверяем результат выполнения метода.
  78.         assertEquals(output.getOverallBalance(), sampleOutput.balance);
  79.         assertEquals(output.getOverallFee(), 15);
  80.  
  81.         for (int i = 0; i < subscriptions.size(); ++i) {
  82.             assertTrue(output.getSubscriptionIds().contains(subscriptions.get(i).id));
  83.         }
  84.  
  85.         assertEquals(output.getSubscriptionIds().size(), subscriptions.size());
  86.  
  87.         verify(customerService, times(1)).lookupCustomer(sampleOutput.id);
  88.         verify(subscriptionService, times(1)).getSubscriptions(sampleOutput.id);
  89.     }
  90.  
  91.     @Test
  92.     void TestCalculateNullCustomer() {
  93.         CustomerPojo sampleOutput = createMockCustomer(10);
  94.         sampleOutput.id = UUID.randomUUID();
  95.  
  96.         when(customerService.lookupCustomer(sampleOutput.id)).thenReturn(null);
  97.         StatisticPerCustomerBO output = statisticService.calculate(sampleOutput.id);
  98.  
  99.         assertEquals(output, null);
  100.         verify(customerService, times(1)).lookupCustomer(sampleOutput.id);
  101.     }
  102.  
  103.     List<CustomerPojo> generateCustomers(int count) {
  104.         ArrayList<CustomerPojo> pojos = new ArrayList<>();
  105.         for (int i =0; i < count; ++i) {
  106.             CustomerPojo customer = createMockCustomer(10);
  107.             customer.id = UUID.randomUUID();
  108.             pojos.add(customer);
  109.         }
  110.         return pojos;
  111.     }
  112.  
  113.     List<StatisticPerCustomerBO> generateStatistics(int count) {
  114.         ArrayList<StatisticPerCustomerBO> pojos = new ArrayList<>();
  115.         for (int i =0; i < count; ++i) {
  116.             StatisticPerCustomerBO statObjec = new StatisticPerCustomerBO();
  117.             statObjec.setOverallBalance(10);
  118.             statObjec.setOverallFee(5);
  119.             pojos.add(statObjec);
  120.         }
  121.         return pojos;
  122.     }
  123.  
  124.     @Test
  125.     void testCalculate() {
  126.         StatisticServiceImpl spyService = Mockito.spy(statisticService);
  127.         List<CustomerPojo> customers = generateCustomers(4);
  128.         List<StatisticPerCustomerBO> statistics = generateStatistics(4);
  129.  
  130.         Set<UUID> ids = new HashSet<>();
  131.  
  132.         for (int i=0;i<customers.size(); ++i) {
  133.             statistics.get(i).setCustomerId(customers.get(i).id);
  134.             ids.add(customers.get(i).id);
  135.             Mockito.doReturn(statistics.get(i)).when(spyService).calculate(customers.get(i).id);
  136.             //when(service.calculate(customers.get(i).id)).thenReturn(statistics.get(i));
  137.         }
  138.  
  139.         // test case of null
  140.         UUID randomId = UUID.randomUUID();
  141.         ids.add(randomId);
  142.         Mockito.doReturn(null).when(spyService).calculate(randomId);
  143.  
  144.         when(customerService.getCustomerIds()).thenReturn(ids);
  145.  
  146.         StatisticBO bo = spyService.calculate();
  147.  
  148.         assertEquals(bo.getOverallBalance(), 40);
  149.         assertEquals(bo.getOverallFee(), 20);
  150.  
  151.         assertEquals(bo.getCustomers().size(), statistics.size());
  152.  
  153.         for (int i = 0; i < statistics.size(); ++i) {
  154.             assertTrue(bo.getCustomers().contains(statistics.get(i)));
  155.         }
  156.     }
  157. }
  158.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement