Last major update: 25.08.2020
- Что такое авторизация/аутентификация
 - Где хранить токены
 - Как ставить куки ?
 - Процесс логина
 - Процесс рефреш токенов
 - Кража токенов/Механизм контроля токенов
 
| cls | |
| function Create-GelfMessage( ){ | |
| Param( | |
| [string] $message, | |
| [Hashtable] $extraFields =@{}, | |
| [int] $level=1, | |
| [string] $source=$env:computername | 
| var rr1875 = function () { | |
| var scriptId = "MtStep"; | |
| var counter = 0; | |
| function getStepId(doc) { | |
| if (doc.Bought) | |
| return 3; | |
| if (doc.Clicked) | |
| return 2; | 
| using System; | |
| namespace RetailRocket.Common.DateTimeUtils | |
| { | |
| public static class TimeZoneInfoExtensions | |
| { | |
| public static DateTimeOffset NowOffset(this TimeZoneInfo timeZoneInfo) | |
| { | |
| var offset = new DateTimeOffset(DateTime.UtcNow, TimeZoneInfo.Utc.BaseUtcOffset); | |
| return offset.ToOffset(timeZoneInfo.BaseUtcOffset); | 
| public static class Results | |
| { | |
| public static OptionalResult<T> Optional<T>(T res, string nullExceptionMessage = null) where T : class | |
| { | |
| return new OptionalResult<T>(res, nullExceptionMessage); | |
| } | |
| public static OperationResult<T> Success<T>(T res) | |
| { | |
| return OperationResult<T>.Success(res); | |
| } | 
| Given.AtPartnerRepository().Created(_fixture.CreateRandomPartner()); | |
| Given.AtSubscribersRepository().Created(_fixture.CreateRandomSubscribers(3)); | |
| // Где | |
| // Given - свойство базового теста типа IGiven | |
| // AtSubscribersRepository - это extension метод для IGiven c Lazy созданием соотв.объекта с мэппером и обертки с Created = Save | |
| //Остальное по аналогии | |
| When.EtsDemon().ProcessRequest(request); |