Beispiel #1
0
        public async Task SaveCodeFragmentEventAsync(
            string functionMode,
            IEnumerable <CodeFragment> addedCodeFragments,
            IEnumerable <CodeFragment> modifiedCodeFragments,
            IEnumerable <CodeFragment> removedCodeFragments)
        {
            var codeFragments = new List <RepositoryModels.CodeFragment>();

            codeFragments.AddRange(addedCodeFragments
                                   .Select(codeFragment =>
                                           MapCodeFragment(codeFragment, CodeFragmentStatus.Added)));

            codeFragments.AddRange(modifiedCodeFragments
                                   .Select(codeFragment =>
                                           MapCodeFragment(codeFragment, CodeFragmentStatus.Modified)));

            codeFragments.AddRange(removedCodeFragments
                                   .Select(codeFragment =>
                                           MapCodeFragment(codeFragment, CodeFragmentStatus.Removed)));

            if (codeFragments.Count > 0)
            {
                var codeFragmentEvent = new RepositoryModels.CodeFragmentEvent
                {
                    CodeFragments = codeFragments,
                    Mode          = functionMode,
                };

                await _eventDataRepository.StoreAsync(codeFragmentEvent);
            }
        }
        public async Task SaveCodeFragmentEventAsync_OnlyAddedFragments_StoresFragmentEventToRepository()
        {
            var eventDataRepository   = Substitute.For <IEventDataRepository>();
            var eventDataService      = new EventDataService(eventDataRepository);
            var expectedCodeFragments = new List <RepositoryModels.CodeFragment>
            {
                new RepositoryModels.CodeFragment
                {
                    Content    = "using namespace System;",
                    Identifier = "csharp_using",
                    Language   = CodeFragmentLanguage.CSharp,
                    Platform   = CodeFragmentPlatform.Net,
                    Status     = CodeFragmentStatus.Added
                },
                new RepositoryModels.CodeFragment
                {
                    Content    = "import { axios } from 'axios';",
                    Identifier = "javascript_import",
                    Language   = CodeFragmentLanguage.JavaScript,
                    Platform   = CodeFragmentPlatform.JavaScript,
                    Status     = CodeFragmentStatus.Added
                }
            };
            var expectedCodeFragmentEvent = new RepositoryModels.CodeFragmentEvent
            {
                CodeFragments = expectedCodeFragments,
                Mode          = FunctionMode.Update
            };

            await eventDataService.SaveCodeFragmentEventAsync(
                FunctionMode.Update,
                new[]
            {
                new CodeFragment
                {
                    Content    = "using namespace System;",
                    Identifier = "csharp_using",
                    Language   = CodeFragmentLanguage.CSharp,
                    Platform   = CodeFragmentPlatform.Net
                },
                new CodeFragment
                {
                    Content    = "import { axios } from 'axios';",
                    Identifier = "javascript_import",
                    Language   = CodeFragmentLanguage.JavaScript,
                    Platform   = CodeFragmentPlatform.JavaScript
                }
            }
                );

            await eventDataRepository
            .Received()
            .StoreAsync(Arg.Is <RepositoryModels.CodeFragmentEvent>(codeFragmentEvent =>
                                                                    codeFragmentEvent.DoesEqual(expectedCodeFragmentEvent)));
        }
        public async Task SaveCodeFragmentEventAsync_StoresFragmentEventToRepository()
        {
            var eventDataRepository   = Substitute.For <IEventDataRepository>();
            var expectedCodeFragments = new List <RepositoryModels.CodeFragment>
            {
                new RepositoryModels.CodeFragment
                {
                    Content    = "using namespace System;",
                    Identifier = "csharp_using",
                    Language   = CodeFragmentLanguage.CSharp,
                    Platform   = CodeFragmentPlatform.Net,
                    Status     = CodeFragmentStatus.Added
                },
                new RepositoryModels.CodeFragment
                {
                    Content    = "import { axios } from 'axios';",
                    Identifier = "javascript_import",
                    Language   = CodeFragmentLanguage.JavaScript,
                    Platform   = CodeFragmentPlatform.JavaScript,
                    Status     = CodeFragmentStatus.Added
                },
                new RepositoryModels.CodeFragment
                {
                    Content    = "include vars.php",
                    Identifier = "php_include",
                    Language   = CodeFragmentLanguage.Php,
                    Platform   = CodeFragmentPlatform.Php,
                    Status     = CodeFragmentStatus.Modified
                },
                new RepositoryModels.CodeFragment
                {
                    Content    = "import module",
                    Identifier = "python_import",
                    Language   = CodeFragmentLanguage.Python,
                    Status     = CodeFragmentStatus.Removed
                }
            };
            var expectedCodeFragmentEvent = new RepositoryModels.CodeFragmentEvent
            {
                CodeFragments = expectedCodeFragments,
                Mode          = FunctionMode.Initialize
            };
            var eventDataService = new EventDataService(eventDataRepository);

            await eventDataService.SaveCodeFragmentEventAsync(
                FunctionMode.Initialize,
                addedCodeFragments : new[]
            {
                new CodeFragment
                {
                    Content    = "using namespace System;",
                    Identifier = "csharp_using",
                    Language   = CodeFragmentLanguage.CSharp,
                    Platform   = CodeFragmentPlatform.Net
                },
                new CodeFragment
                {
                    Content    = "import { axios } from 'axios';",
                    Identifier = "javascript_import",
                    Language   = CodeFragmentLanguage.JavaScript,
                    Platform   = CodeFragmentPlatform.JavaScript
                }
            },
                modifiedCodeFragments : new[]
            {
                new CodeFragment
                {
                    Content    = "include vars.php",
                    Identifier = "php_include",
                    Language   = CodeFragmentLanguage.Php,
                    Platform   = CodeFragmentPlatform.Php
                }
            },
                removedCodeFragments : new[]
            {
                new CodeFragment
                {
                    Content    = "import module",
                    Identifier = "python_import",
                    Language   = CodeFragmentLanguage.Python,
                }
            });

            await eventDataRepository
            .Received()
            .StoreAsync(Arg.Is <RepositoryModels.CodeFragmentEvent>(codeFragmentEvent => codeFragmentEvent.DoesEqual(expectedCodeFragmentEvent)));
        }