Еще одна вещь, которая стала для меня важной в этой задаче и может вам будет полезной.
⏳ Когда вы проектируете времязависимую логику, то будет не лишним просовывать в эндпоинты параметр utcNow на время тестирования. То есть возможность передавать текущее время, чтобы можно было эмулироать начало недели, конец недели и разные врменные промежутки.
Я этого не сделал, и нашему тестировщику Дане пришлось пострадать с тем, чтобы постоянно лазить в базу, чтобы подправить время во всех таблицах, чтобы имитировать первый день акции и последний. Ну а мне было чуть сложнее писать автотесты, потому что приходилось писать чуть более сложные моки.
🔫 Тут с одной стороны немного страшно, что перед продом забудешь отключить возможность проставлять такой параметр и что-то упустишь. Но я думаю, что это легко решается через относительно новый класс для тестирования TimeProvider
🅰️ Кстати, рекомендую во всей времязависимой логике юзать эту штуку!
Юзается просто
public class MyService
{
private readonly TimeProvider _timeProvider;
public MyService(TimeProvider timeProvider)
{
_timeProvider = timeProvider ?? throw new ArgumentNullException(nameof(timeProvider));
}
public DateTimeOffset GetCurrentTime()
{
return _timeProvider.GetUtcNow();
}
}
А мокается потом изично, потому что класс абстрактный. Я вот заиспользовал, и был доволен, потому, что раньше для тестов нужно было городить свои городульки, а тут на тебе – все готово! 🪢