где участвует time.Now(), в самом репозитории я прокинул интерфейс, который мне возвращает time.Now() в продакшн, и time.Date(забитая_дата) для тестов
но у меня есть модель, которая гормовским хуком AfterFind опять использует time.Now и проставляет нужные поля в зависимости от даты
какое решение для этого есть, кто-нибудь знает?
как мне мой интерфейс прокинуть в этот AfterFind? Хранить интерфейс time.Now() где-то глобально?
когда вы переопределяете глобальные системные штуки, то скорее всего вам и правда глобально вынести это надо
Ну с ходу в голову приходит совет «не использовать gorm»
горм заменить на что угодно и задача останется той же, не знаю зачем ТС ее назвал
горм никак не вмешивается в логику по большому счету
для контекста, чтобы понимать, что есть AfterFind)
вы по сути делаете надстройку над языком, это не считая языка самый низкий уровень вашего кода
чтобы не путаться в терминологии и получить хороший результат - покажите кода пример)
а что путаться? в системе надо сымитировать время 1 января 2024 года в таймзоне Europe/Moscow, тогда как ты в июне 2023 и посмотреть как операторы будут брать задачу в выходной
мне не понятно что там за интерфейсы и всё звучит как интеграционный тест
интерфейс времени, тут под интерфейсом не обязательно должен пониматься interface Foo
посмотрите в сторону https://github.com/nhatthm/go-clock
я думаю насчет monkey patch это норм идея для го?)
есть даже реализация 🙂 но это очень плохая идея
даже для тестов?)
я пользовал только 1 раз, когда плохая библиотека делала time.Now на который я никак не мог повлиять, но хотел протестировать поведение. https://github.com/bouk/monkey
вызывайте метод на модели, который вызовет clock.Now из нужного места
да я уже глобальную переменную намутил, которая с Now() time.Time, и в тестах я ее подменяю)
Обсуждают сегодня