public async Task Get_Group_GetsAllSnapshotsForGroup()
        {
            var context = TestHttpContextBuilder.CreateForPath($"/group/{groupId}")
                          .WithClaims(configuratorClaim)
                          .TestContext;
            var snapshots = new SnapshotEntryInfo[]
            {
                new SnapshotEntryInfo {
                    Id = Guid.NewGuid().ToString(), GroupId = groupId, Name = "This One", TimeStamp = new DateTime(2013, 10, 1)
                },
                new SnapshotEntryInfo {
                    Id = Guid.NewGuid().ToString(), GroupId = groupId2, Name = "Not This One", TimeStamp = new DateTime(2013, 10, 2)
                }
            };

            snapShotRepository.Setup(s => s.GetSnapshots())
            .ReturnsAsync(snapshots);
            var observed = new SnapshotEntryInfo[0];

            httpResponseFactory.Setup(f => f.BuildJsonResponse(context, It.IsAny <IEnumerable <SnapshotEntryInfo> >()))
            .Returns((HttpContext c, object config) =>
            {
                observed = (config as IEnumerable <SnapshotEntryInfo>)?.ToArray() ?? new SnapshotEntryInfo[0];
                return(Task.FromResult(true));
            });
            await target.Handle(context, options);

            Assert.Single(observed);
            Assert.Equal(snapshots[0].Id, observed[0].Id);
            Assert.Equal(groupId, observed[0].GroupId);
            Assert.Equal(snapshots[0].Name, observed[0].Name);
            Assert.Equal(snapshots[0].TimeStamp, observed[0].TimeStamp);
        }
        public async Task <CommandResult> Handle(CreateSnapshotCommand command)
        {
            var client = await clientService.GetClientOrDefault(command.ClientId);

            if (client == null || string.IsNullOrWhiteSpace(client.Group))
            {
                return(CommandResult.Failure("Could not find client with group. Can only create snapshot for client with group"));
            }
            var models  = configurationModelRegistry.GetConfigurationRegistrations(true);
            var version = configurationModelRegistry.GetVersion();
            var configurationIdentity = new ConfigurationIdentity(client, version);
            var snapshotInfo          = new SnapshotEntryInfo
            {
                Id        = Guid.NewGuid().ToString(),
                GroupId   = client.Group,
                Name      = command.Name,
                TimeStamp = DateTime.UtcNow
            };
            var configurations = new List <ConfigInstance>();

            foreach (var model in models)
            {
                var configurationInstance = await configurationService.GetAsync(model.ConfigType, configurationIdentity);

                configurations.Add(configurationInstance);
            }

            await snapshotRepository.SaveSnapshot(new ConfigurationSnapshotEntry { Info = snapshotInfo, Configurations = configurations });

            return(CommandResult.Success());
        }
        public ConfigurationSnapshotRepositoryTests()
        {
            connector       = new Mock <ISnapshotStorageConnector>();
            registry        = new Mock <IConfigurationModelRegistry>();
            defaultIdentity = new ConfigurationIdentity(new ConfigurationClient("39aa8bb2-618b-4928-9c96-790f6dd5df63"), new Version(1, 0));
            defaultEntry    = new SnapshotEntryInfo {
                Id = "39aa8bb2-218b-4928-9c96-790f6dd5df63", GroupId = "39aa8bb2-218b-4928-9c96-790f6dd5df69", Name = "1.0", TimeStamp = DateTime.UtcNow
            };
            target = new TextStorageSnapshotRepository(connector.Object, registry.Object);
            var json = JsonConvert.SerializeObject(new object[] { defaultEntry });

            connector.Setup(c => c.GetSnapshotRegistryFileAsync())
            .ReturnsAsync(json);
        }
        public async Task Get_SnapshotRegistry()
        {
            var expected = new SnapshotEntryInfo[]
            {
                defaultEntry,
                new SnapshotEntryInfo {
                    Id = "99aa8bb2-218b-4928-9c96-790f6dd5df63", GroupId = "99aa8bb2-218b-4928-9c96-790f6dd5df69", Name = "1.2", TimeStamp = DateTime.UtcNow
                }
            };
            var json = JsonConvert.SerializeObject(expected);

            connector.Setup(c => c.GetSnapshotRegistryFileAsync())
            .ReturnsAsync(json);
            var result = await target.GetSnapshots();

            Assert.Equal(expected, result, new SnapShotEqualityComparer());
        }