Вижу сообщение в рабочем мессенджере в одном из каналов, посвященных разработке нашего IOS приложения Drinkit.
Автор сообщения - наш Senior QA, Денис.
Прочитав это сообщение, я понял, что это прекрасная иллюстрация той мысли, которую я стараюсь нести в этот мир:
Лучший QA - тот, что глубоко разбирается в своем продукте (его коде, инфре и так далее). Приведу его полностью, а вас спрошу - нравятся вам такие баг-репорты? Погружаетесь ли вы так же глубоко в проблему, когда ее видите? Стремитесь ли вы к такому, если нет?
Я писал тест на активацию публичной акции неавторизованным пользователем через меню по кнопке "Войти и применить"
Так вот, там после авторизации происходит чехарда, которая приводит к разным последствиям:
Акция не применится и ничего плохого не произойдет и её можно будет применить (хотя должны были применить)
Акция применится, но через какое-то время произойдет краш - {link}
Он же, но с прода: {link}
Если я всё правильно понимаю, то проблема тут в
private func handleAuthorizationCompleted(with promotion: Promotion) {
if authSession.isAuthorized == false {
return
}
Task {
do {
try await self.promotionsRepository.refresh()
Task { @MainActor in
self.proceedWithPromoApplying(promotion, sender: .menu)
}
} catch {
Task { @MainActor in
self.bannerPresenter.showBanner(for: .genericError())
}
}
}
}Здесь promotionsRepository рефрешится асинхронно, поэтому таска следующая за ним может выполнится как до, так и после применения акции. И видимо можно поймать момент, когда мы применим акцию, но потом зарефрешим репозиторий и что-то ломается. Ну или не такая последовательность, но в любом случае, как-будто здесь есть место гонке, которая может всё сломать