private async Task EnrichAssetAsync(EnrichedAssetEvent result, AssetEvent assetEvent, Envelope <AppEvent> @event) { var asset = (await grainFactory .GetGrain <IAssetGrain>(assetEvent.AssetId) .GetStateAsync(@event.Headers.EventStreamNumber())).Value; SimpleMapper.Map(asset, result); switch (assetEvent) { case AssetCreated _: result.Type = EnrichedAssetEventType.Created; break; case AssetRenamed _: result.Type = EnrichedAssetEventType.Renamed; break; case AssetUpdated _: result.Type = EnrichedAssetEventType.Updated; break; case AssetDeleted _: result.Type = EnrichedAssetEventType.Deleted; break; } result.Name = $"Asset{result.Type}"; }
public async Task Should_resolve_text_from_event(string encoding) { var @event = new EnrichedAssetEvent { Id = DomainId.NewGuid(), FileVersion = 0, FileSize = 100, AppId = appId }; SetupText(@event.ToRef(), Encode(encoding, "hello+assets")); var vars = new TemplateVars { ["event"] = @event }; var template = $@" Text: {{{{ event | assetText: '{encoding}' }}}} "; var expected = $@" Text: hello+assets "; var result = await sut.RenderAsync(template, vars); Assert.Equal(Cleanup(expected), Cleanup(result)); }
public async Task Should_resolve_asset_text_from_event() { var @event = new EnrichedAssetEvent { Id = DomainId.NewGuid(), FileVersion = 0, FileSize = 100, AppId = appId }; SetupText(@event.Id, Encoding.UTF8.GetBytes("Hello Asset")); var vars = new TemplateVars { ["event"] = @event }; var template = @" Text: {{ event | assetText }} "; var expected = $@" Text: Hello Asset "; var result = await sut.RenderAsync(template, vars); Assert.Equal(Cleanup(expected), Cleanup(result)); }
public async Task <EnrichedEvent> EnrichAsync(Envelope <AppEvent> @event) { Guard.NotNull(@event, nameof(@event)); if (@event.Payload is ContentEvent contentEvent) { var result = new EnrichedContentEvent(); await Task.WhenAll( EnrichContentAsync(result, contentEvent, @event), EnrichDefaultAsync(result, @event)); return(result); } if (@event.Payload is AssetEvent assetEvent) { var result = new EnrichedAssetEvent(); await Task.WhenAll( EnrichAssetAsync(result, assetEvent, @event), EnrichDefaultAsync(result, @event)); return(result); } return(null); }
public async Task Should_resolve_asset_text_from_event() { var @event = new EnrichedAssetEvent { Id = DomainId.NewGuid(), FileVersion = 0, FileSize = 100, AppId = appId }; SetupText(@event.Id, Encoding.UTF8.GetBytes("Hello Asset")); var vars = new ScriptVars { ["event"] = @event }; var script = @" getAssetText(event, function (text) { var result = `Text: ${text}`; complete(result); });"; var expected = @" Text: Hello Asset "; var result = (await sut.ExecuteAsync(vars, script)).ToString(); Assert.Equal(Cleanup(expected), Cleanup(result)); }
public async Task Should_resolve_text_from_event(string encoding) { var @event = new EnrichedAssetEvent { Id = DomainId.NewGuid(), FileVersion = 0, FileSize = 100, AppId = appId }; SetupText(@event.ToRef(), Encode(encoding, "hello+assets")); var vars = new ScriptVars { ["event"] = @event }; var expected = @" Text: hello+assets "; var script = $@" getAssetText(event, function (text) {{ var result = `Text: ${{text}}`; complete(result); }}, '{encoding}');"; var result = (await sut.ExecuteAsync(vars, script)).ToString(); Assert.Equal(Cleanup(expected), Cleanup(result)); }
public async Task Should_resolve_blur_hash_from_event() { var @event = new EnrichedAssetEvent { Id = DomainId.NewGuid(), AssetType = AssetType.Image, FileVersion = 0, FileSize = 100, AppId = appId }; SetupBlurHash(@event.ToRef(), "Hash"); var vars = new ScriptVars { ["event"] = @event }; var expected = @" Text: Hash "; var script = @" getAssetBlurHash(event, function (text) { var result = `Text: ${text}`; complete(result); });"; var result = (await sut.ExecuteAsync(vars, script)).ToString(); Assert.Equal(Cleanup(expected), Cleanup(result)); }
public async Task Should_resolve_blur_hash_from_event() { var @event = new EnrichedAssetEvent { Id = DomainId.NewGuid(), AssetType = AssetType.Image, FileVersion = 0, FileSize = 100, AppId = appId }; SetupBlurHash(@event.ToRef(), "Hash"); var vars = new TemplateVars { ["event"] = @event }; var template = @" Text: {{ event | assetBlurHash }} "; var expected = $@" Text: Hash "; var result = await sut.RenderAsync(template, vars); Assert.Equal(Cleanup(expected), Cleanup(result)); }
public void Should_null_when_content_action_not_found(string script) { var @event = new EnrichedAssetEvent(); var result = sut.Format(script, @event); Assert.Equal("null", result); }
public void Should_transform_replacements(string script, string expect) { var @event = new EnrichedAssetEvent { FileName = "Donald\"Duck " }; var result = sut.Format(script, @event); Assert.Equal(expect, result); }
public static AssetRef ToRef(this EnrichedAssetEvent @event) { return(new AssetRef( @event.AppId.Id, @event.Id, @event.FileVersion, @event.FileSize, @event.MimeType, @event.AssetType)); }
public void Should_format_asset_content_url_from_event(string script) { var @event = new EnrichedAssetEvent { Id = assetId }; var result = sut.Format(script, @event); Assert.Equal("Download at asset-content-url", result); }
public void Should_format_asset_asset_type_from_event(string script) { var @event = new EnrichedAssetEvent { AssetType = AssetType.Audio }; var result = sut.Format(script, @event); Assert.Equal("Type: Audio", result); }
public void Should_format_asset_file_name_from_event(string script) { var @event = new EnrichedAssetEvent { FileName = "my-file.png" }; var result = sut.Format(script, @event); Assert.Equal("File: my-file.png", result); }
public void Should_format_base_property(string script) { var @event = new EnrichedAssetEvent { Version = 13 }; var result = sut.Format(script, @event); Assert.Equal("Version: 13", result); }
public void Should_trigger_check_if_condition_is_empty() { TestForCondition(string.Empty, ctx => { var @event = new EnrichedAssetEvent(); var result = sut.Trigger(@event, ctx); Assert.True(result); }); }
public void Should_not_trigger_check_if_condition_does_not_matchs() { TestForCondition("false", ctx => { var @event = new EnrichedAssetEvent(); var result = sut.Trigger(@event, ctx); Assert.False(result); }); }
public async IAsyncEnumerable <EnrichedEvent> CreateSnapshotEventsAsync(RuleContext context, [EnumeratorCancellation] CancellationToken ct = default) { await foreach (var asset in assetRepository.StreamAll(context.AppId.Id, ct)) { var result = new EnrichedAssetEvent { Type = EnrichedAssetEventType.Created }; SimpleMapper.Map(asset, result); result.Actor = asset.LastModifiedBy; result.Name = "AssetQueried"; yield return(result); } }
public async IAsyncEnumerable <EnrichedEvent> CreateEnrichedEventsAsync(Envelope <AppEvent> @event, RuleContext context, [EnumeratorCancellation] CancellationToken ct) { var assetEvent = (AssetEvent)@event.Payload; var result = new EnrichedAssetEvent(); var asset = await assetLoader.GetAsync( assetEvent.AppId.Id, assetEvent.AssetId, @event.Headers.EventStreamNumber()); if (asset != null) { SimpleMapper.Map(asset, result); result.PixelHeight = asset.Metadata?.GetPixelHeight(); result.PixelWidth = asset.Metadata?.GetPixelWidth(); result.AssetType = asset.Type; } switch (@event.Payload) { case AssetCreated: result.Type = EnrichedAssetEventType.Created; break; case AssetAnnotated: result.Type = EnrichedAssetEventType.Annotated; break; case AssetUpdated: result.Type = EnrichedAssetEventType.Updated; break; case AssetDeleted: result.Type = EnrichedAssetEventType.Deleted; break; } yield return(result); }