forked from Sanders/TelegaBot
Fixes for adding read date
This commit is contained in:
@@ -5,6 +5,8 @@ import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.sql.Date;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Data
|
||||
public class BookCreationCache {
|
||||
|
||||
@@ -10,6 +10,10 @@ import ru.cathub.telegabot.model.BotUser;
|
||||
import ru.cathub.telegabot.service.*;
|
||||
import ru.cathub.telegabot.utils.Constants;
|
||||
|
||||
import java.sql.Date;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
import static ru.cathub.telegabot.model.BookEditStateCache.BookEditState.*;
|
||||
import static ru.cathub.telegabot.utils.Constants.*;
|
||||
|
||||
@@ -65,7 +69,7 @@ public class BookCreationServiceImpl implements BookCreationService {
|
||||
case ADDING_RATING -> {
|
||||
int rating = validateAndParseRating(text);
|
||||
cache.setRating(rating);
|
||||
cache.setCreationState(CreationState.ADDING_DATE);
|
||||
cache.setCreationState(BookCreationCache.CreationState.ADDING_DATE);
|
||||
bookCacheService.updateCache(user.getId(), cache);
|
||||
telegramClientService.sendMessage(user, "📅 Введите дату прочтения (в формате ДД.ММ.ГГГГ):");
|
||||
}
|
||||
@@ -96,6 +100,10 @@ public class BookCreationServiceImpl implements BookCreationService {
|
||||
} catch (NumberFormatException e) {
|
||||
log.error("Invalid rating format for user {}", user.getId(), e);
|
||||
telegramClientService.sendMessage(user, "❌ Ошибка: рейтинг должен быть числом от 0 до 10");
|
||||
}
|
||||
catch (ParseException e) {
|
||||
log.error("Invalid date format for user {}", user.getId(), e);
|
||||
telegramClientService.sendMessage(user, "❌ Ошибка: дата должна быть в формате ДД.ММ.ГГГГ");
|
||||
} catch (Exception e) {
|
||||
log.error("Error creating book for user {}", user.getId(), e);
|
||||
telegramClientService.sendMessage(user, "❌ Ошибка при создании книги");
|
||||
@@ -111,6 +119,12 @@ public class BookCreationServiceImpl implements BookCreationService {
|
||||
return rating;
|
||||
}
|
||||
|
||||
private Date parseDate(String text) throws ParseException {
|
||||
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
|
||||
format.setLenient(false);
|
||||
return new Date(format.parse(text).getTime());
|
||||
}
|
||||
|
||||
private Book createBookFromCache(BookCreationCache cache, BotUser user) {
|
||||
return Book.builder()
|
||||
.title(cache.getTitle())
|
||||
|
||||
@@ -21,9 +21,12 @@ public class ProfileServiceImpl implements ProfileService {
|
||||
public void enterProfileEditingMode(BotUser user) {
|
||||
user.setWorkingMode(BotUser.WorkingMode.EDIT_PROFILE);
|
||||
userRepository.save(user);
|
||||
telegramClientService.sendMessage(
|
||||
user,
|
||||
"⌨️ Режим редактирования профиля:\nТекущая цель по книгам "+user.getBooksToRead());
|
||||
telegramClientService.sendMessage(
|
||||
user,
|
||||
"⌨️ Режим редактирования профиля:\nВведите цель по количеству книг или вернитесь назад",
|
||||
"Введите цель по количеству книг или вернитесь назад",
|
||||
KeyboardHelper.getProfileMenuKeyboard()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package ru.cathub.telegabot.service.impl;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
@@ -23,17 +24,22 @@ import static org.mockito.Mockito.*;
|
||||
import static ru.cathub.telegabot.model.BookCreationCache.CreationState.*;
|
||||
import static ru.cathub.telegabot.utils.Constants.*;
|
||||
|
||||
@Nested
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class BookCreationServiceImplTest {
|
||||
|
||||
@Mock
|
||||
private BookCacheService bookCacheService;
|
||||
@Mock private TelegramClientService telegramClientService;
|
||||
@Mock private BookRepository bookRepository;
|
||||
@Mock private BookCommonService bookCommonService;
|
||||
|
||||
@InjectMocks private BookCreationServiceImpl bookCreationService;
|
||||
|
||||
@Mock
|
||||
private TelegramClientService telegramClientService;
|
||||
@Mock
|
||||
private BookRepository bookRepository;
|
||||
@Mock
|
||||
private BookCommonService bookCommonService;
|
||||
|
||||
@InjectMocks
|
||||
private BookCreationServiceImpl bookCreationService;
|
||||
|
||||
private BotUser testUser;
|
||||
private BookCreationCache testCache;
|
||||
|
||||
@@ -50,24 +56,24 @@ class BookCreationServiceImplTest {
|
||||
// Используем ArgumentCaptor для захвата аргументов
|
||||
ArgumentCaptor<Long> userIdCaptor = ArgumentCaptor.forClass(Long.class);
|
||||
ArgumentCaptor<BookCreationCache> cacheCaptor = ArgumentCaptor.forClass(BookCreationCache.class);
|
||||
|
||||
|
||||
// Мокируем вызов с конкретными аргументами
|
||||
when(bookCacheService.updateCache(eq(1L), any(BookCreationCache.class)))
|
||||
.thenReturn(testCache);
|
||||
.thenReturn(testCache);
|
||||
|
||||
bookCreationService.handleNewAddRequest(testUser, ADD_BOOK);
|
||||
|
||||
// Проверяем аргументы вызова
|
||||
verify(bookCacheService).updateCache(userIdCaptor.capture(), cacheCaptor.capture());
|
||||
|
||||
|
||||
// Убеждаемся в корректности параметров
|
||||
assertEquals(1L, userIdCaptor.getValue());
|
||||
assertEquals(ADDING_TITLE, cacheCaptor.getValue().getCreationState());
|
||||
|
||||
|
||||
verify(telegramClientService).sendMessageWithMarkdown(
|
||||
eq(testUser),
|
||||
contains("Введите название книги"),
|
||||
isNull()
|
||||
eq(testUser),
|
||||
contains("Введите название книги"),
|
||||
isNull()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -123,7 +129,7 @@ class BookCreationServiceImplTest {
|
||||
|
||||
// Then
|
||||
verify(bookCacheService).updateCache(eq(1L), argThat(cache ->
|
||||
cache.getCreationState() == BookCreationCache.CreationState.ADDING_DATE
|
||||
cache.getCreationState() == BookCreationCache.CreationState.ADDING_DATE
|
||||
));
|
||||
verify(telegramClientService).sendMessage(eq(testUser), contains("дату прочтения"));
|
||||
}
|
||||
@@ -145,7 +151,7 @@ class BookCreationServiceImplTest {
|
||||
verify(telegramClientService).sendMessage(eq(testUser), contains("от 0 до 10"));
|
||||
verify(bookRepository, never()).save(any());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void handleValidDate_ShouldSaveBookAndClearCache() throws Exception {
|
||||
// Given
|
||||
@@ -184,6 +190,7 @@ class BookCreationServiceImplTest {
|
||||
bookCreationService.handleExistingAddCache(testUser, "invalid-date");
|
||||
|
||||
// Then
|
||||
verify(telegramClientService).sendMessage(eq(testUser), contains("неверный формат"));
|
||||
verify(telegramClientService).sendMessage(eq(testUser), contains("дата должна быть в формате "));
|
||||
verify(bookRepository, never()).save(any());
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,8 @@ import ru.cathub.telegabot.service.BookCacheService;
|
||||
import ru.cathub.telegabot.service.TelegramClientService;
|
||||
import ru.cathub.telegabot.utils.BookFormatUtils;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
@@ -39,10 +41,22 @@ class BookListingServiceImplTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void showPaginatedBookList_ShouldHandleFirstPage() {
|
||||
void showPaginatedBookList_ShouldHandleFirstPage() throws ParseException {
|
||||
List<Book> books = List.of(
|
||||
new Book(1L, "Book 1", "Author 1", 8, testUser),
|
||||
new Book(2L, "Book 2", "Author 2", 9, testUser)
|
||||
Book.builder()
|
||||
.id(1L)
|
||||
.title("Book 1")
|
||||
.author("Author 1")
|
||||
.rating(8)
|
||||
.botUser(testUser)
|
||||
.build(),
|
||||
Book.builder()
|
||||
.id(2L)
|
||||
.title("Book 2")
|
||||
.author("Author 2")
|
||||
.rating(9)
|
||||
.botUser(testUser)
|
||||
.build()
|
||||
);
|
||||
Page<Book> page = new PageImpl<>(books);
|
||||
|
||||
@@ -62,7 +76,13 @@ class BookListingServiceImplTest {
|
||||
|
||||
@Test
|
||||
void formatBookEntry_ShouldHandleEditMode() {
|
||||
Book book = new Book(1L, "Test Book", "Test Author", 7, testUser);
|
||||
var book = Book.builder()
|
||||
.id(1L)
|
||||
.title("Test Book")
|
||||
.author("Test Author")
|
||||
.rating(7)
|
||||
.botUser(testUser)
|
||||
.build();
|
||||
String result = BookFormatUtils.formatBookEntry(book, 0, true);
|
||||
|
||||
assertTrue(result.contains("\uFE0F\u20E3")); // Check for edit emoji
|
||||
|
||||
Reference in New Issue
Block a user