parser is ready

This commit is contained in:
root
2025-09-14 11:46:47 +05:00
parent 1b8a0fc308
commit 4355358e6a
16 changed files with 1398 additions and 116 deletions
@@ -0,0 +1,201 @@
package kz.konturai.parser.service;
import kz.konturai.parser.model.MarketItem;
import kz.konturai.parser.repository.MarketItemRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.test.context.TestPropertySource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@TestPropertySource(properties = {
"spring.data.mongodb.host=92.38.48.166",
"spring.data.mongodb.port=27017",
"spring.data.mongodb.database=parser_test_db",
"spring.data.mongodb.username=konturai",
"spring.data.mongodb.password=konturai2024",
"spring.data.mongodb.authentication-database=admin"
})
public class MarketItemServiceTest {
@Autowired
private MarketItemService marketItemService;
@Autowired
private MarketItemRepository marketItemRepository;
@BeforeEach
public void setUp() {
// Очищаем базу данных перед каждым тестом
marketItemRepository.deleteAll();
// Создаем тестовые данные
createTestData();
}
private void createTestData() {
// Создаем записи для Kursiv
MarketItem kursivItem1 = new MarketItem();
kursivItem1.setSourceName("Kursiv (Бизнес/экономика)");
kursivItem1.setTitle("Test Kursiv News 1");
kursivItem1.setUrl("https://kursiv.media/test1");
kursivItem1.setPublishedAt(LocalDateTime.now().minusDays(1));
kursivItem1.setHash("kursiv_hash_1");
marketItemRepository.save(kursivItem1);
MarketItem kursivItem2 = new MarketItem();
kursivItem2.setSourceName("Kursiv (Бизнес/экономика)");
kursivItem2.setTitle("Test Kursiv News 2");
kursivItem2.setUrl("https://kursiv.media/test2");
kursivItem2.setPublishedAt(LocalDateTime.now().minusDays(2));
kursivItem2.setHash("kursiv_hash_2");
marketItemRepository.save(kursivItem2);
// Создаем записи для Kapital
MarketItem kapitalItem1 = new MarketItem();
kapitalItem1.setSourceName("Kapital.kz (Бизнес)");
kapitalItem1.setTitle("Test Kapital News 1");
kapitalItem1.setUrl("https://kapital.kz/test1");
kapitalItem1.setPublishedAt(LocalDateTime.now().minusDays(3));
kapitalItem1.setHash("kapital_hash_1");
marketItemRepository.save(kapitalItem1);
MarketItem kapitalItem2 = new MarketItem();
kapitalItem2.setSourceName("Kapital.kz (Бизнес)");
kapitalItem2.setTitle("Test Kapital News 2");
kapitalItem2.setUrl("https://kapital.kz/test2");
kapitalItem2.setPublishedAt(LocalDateTime.now().minusDays(4));
kapitalItem2.setHash("kapital_hash_2");
marketItemRepository.save(kapitalItem2);
}
@Test
public void testGetAllItemsWithPagination() {
Pageable pageable = PageRequest.of(0, 2, Sort.by("publishedAt").descending());
Page<MarketItem> page = marketItemService.getAllItems(pageable);
assertNotNull(page);
assertEquals(4, page.getTotalElements());
assertEquals(2, page.getContent().size());
assertEquals(2, page.getTotalPages());
}
@Test
public void testGetItemsBySource() {
Pageable pageable = PageRequest.of(0, 10);
Page<MarketItem> kursivItems = marketItemService.getItemsBySource("Kursiv (Бизнес/экономика)", pageable);
assertNotNull(kursivItems);
assertEquals(2, kursivItems.getTotalElements());
assertEquals(2, kursivItems.getContent().size());
// Проверяем, что все записи принадлежат Kursiv
for (MarketItem item : kursivItems.getContent()) {
assertEquals("Kursiv (Бизнес/экономика)", item.getSourceName());
}
}
@Test
public void testGetItemsByDateRange() {
LocalDateTime startDate = LocalDateTime.now().minusDays(3);
LocalDateTime endDate = LocalDateTime.now().minusDays(1);
Pageable pageable = PageRequest.of(0, 10);
Page<MarketItem> items = marketItemService.getItemsByDateRange(startDate, endDate, pageable);
assertNotNull(items);
assertEquals(2, items.getTotalElements());
// Проверяем, что все записи в указанном диапазоне дат
for (MarketItem item : items.getContent()) {
assertTrue(item.getPublishedAt().isAfter(startDate.minusSeconds(1)));
assertTrue(item.getPublishedAt().isBefore(endDate.plusSeconds(1)));
}
}
@Test
public void testGetItemsWithFilters() {
LocalDateTime startDate = LocalDateTime.now().minusDays(3);
LocalDateTime endDate = LocalDateTime.now().minusDays(1);
Pageable pageable = PageRequest.of(0, 10);
Page<MarketItem> items = marketItemService.getItemsWithFilters(
"Kursiv (Бизнес/экономика)", startDate, endDate, pageable);
assertNotNull(items);
assertEquals(1, items.getTotalElements());
// Проверяем, что запись соответствует фильтрам
MarketItem item = items.getContent().get(0);
assertEquals("Kursiv (Бизнес/экономика)", item.getSourceName());
assertTrue(item.getPublishedAt().isAfter(startDate.minusSeconds(1)));
assertTrue(item.getPublishedAt().isBefore(endDate.plusSeconds(1)));
}
@Test
public void testGetTotalItemsCount() {
long count = marketItemService.getTotalItemsCount();
assertEquals(4, count);
}
@Test
public void testGetItemsCountBySource() {
long kursivCount = marketItemService.getItemsCountBySource("Kursiv (Бизнес/экономика)");
assertEquals(2, kursivCount);
long kapitalCount = marketItemService.getItemsCountBySource("Kapital.kz (Бизнес)");
assertEquals(2, kapitalCount);
}
@Test
public void testGetAllSourceNames() {
List<String> sources = marketItemService.getAllSourceNames();
assertNotNull(sources);
assertEquals(2, sources.size());
assertTrue(sources.contains("Kursiv (Бизнес/экономика)"));
assertTrue(sources.contains("Kapital.kz (Бизнес)"));
}
@Test
public void testGetSourceStatistics() {
Map<String, Long> statistics = marketItemService.getSourceStatistics();
assertNotNull(statistics);
assertEquals(2, statistics.size());
assertEquals(Long.valueOf(2), statistics.get("Kursiv (Бизнес/экономика)"));
assertEquals(Long.valueOf(2), statistics.get("Kapital.kz (Бизнес)"));
}
@Test
public void testParseDate() {
// Тест различных форматов даты
LocalDateTime date1 = marketItemService.parseDate("2025-01-14");
assertNotNull(date1);
LocalDateTime date2 = marketItemService.parseDate("2025-01-14T10:30:00");
assertNotNull(date2);
LocalDateTime date3 = marketItemService.parseDate("2025-01-14T10:30:00.000");
assertNotNull(date3);
LocalDateTime date4 = marketItemService.parseDate("2025-01-14 10:30:00");
assertNotNull(date4);
// Тест null и пустой строки
assertNull(marketItemService.parseDate(null));
assertNull(marketItemService.parseDate(""));
assertNull(marketItemService.parseDate("invalid-date"));
}
}