Exemple #1
0
        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));
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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));
        }
Exemple #7
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
 public static AssetRef ToRef(this EnrichedAssetEvent @event)
 {
     return(new AssetRef(
                @event.AppId.Id,
                @event.Id,
                @event.FileVersion,
                @event.FileSize,
                @event.MimeType,
                @event.AssetType));
 }
Exemple #12
0
        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);
        }
Exemple #13
0
        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);
        }
Exemple #14
0
        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);
        }
Exemple #15
0
        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);
        }
Exemple #16
0
        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);
            });
        }
Exemple #17
0
        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);
        }