public async Task Test(string url, AfCodeType type) { using var mocker = AutoMock.GetLoose(); var service = mocker.Create <AfCodeService>(); var bk = new Bk { Url = url, Title = "newbe.pro", Tags = new List <string> { "newbe", "blog" } }; mocker.Mock <IIndexedDbRepo <Bk, string> >() .Setup(x => x.GetAsync(url)) .ReturnsAsync(bk); // act var code = await service.CreateAfCodeAsync(url, type); Console.WriteLine(code); var tryParseAsync = await service.TryParseAsync(code, out var result); tryParseAsync.Should().BeTrue(); result !.Should().NotBeNull(); result.Url.Should().Be(bk.Url); result.Title.Should().Be(bk.Title); result.Tags.Should().BeEquivalentTo(bk.Tags); }
public async Task <string> CreateAfCodeAsync(string url, AfCodeType codeType) { var bk = await _bkRepository.GetAsync(url); if (bk == null) { return(string.Empty); } var code = new AfCode { Title = bk.Title, Url = bk.Url, Tags = bk.Tags?.ToArray() ?? Array.Empty <string>(), }; switch (codeType) { case AfCodeType.JsonBase64: { var json = JsonSerializer.Serialize(code); var base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(json)); return(CreateCode(base64String)); } case AfCodeType.CompressionJsonBase64: { var json = JsonSerializer.Serialize(code); var input = Encoding.UTF8.GetBytes(json).AsMemory(); var readOnlyMemory = Compress(input); var base64String = Convert.ToBase64String(readOnlyMemory.Span); return(CreateCode(base64String)); } case AfCodeType.Cloud: throw new NotImplementedException(); case AfCodeType.PlainText: { var json = JsonSerializer.Serialize(code); return(CreateCode(json)); } default: throw new ArgumentOutOfRangeException(nameof(codeType), codeType, null); } string CreateCode(string payload) { return($"{Consts.AfCodeSchemaPrefix}{codeType:D}{payload}"); } }