public async Task <ValueOrError <Relationship <Cluster, Source> > > RemoveSourceFromCluster(string cluster, string source, bool fromBackend = false) { var s = await _visibilityStore.RemoveSourceFromCluster(cluster, source, fromBackend); if (s.HasValue) { _clusterSourceOperations.OnNext(Delta.Create(Relationship.Create(s.Value.Primary, s.Value.Secondary), DeltaType.Removed, fromBackend)); } return(s); }
public async Task <ValueOrError <Cluster> > AddCluster(string name, bool fromBackend = false) { var s = await _visibilityStore.AddCluster(name, fromBackend); if (s.HasValue) { _clusterDeltas.OnNext(Delta.Create(s.Value, DeltaType.Added, fromBackend)); } return(s); }
public async Task <ValueOrError <Relationship <Cluster, User> > > AddUserToCluster(string cluster, string user, bool fromBackend = false) { var s = await _visibilityStore.AddUserToCluster(cluster, user, fromBackend); if (s.HasValue) { _clusterUserOperations.OnNext(Delta.Create(Relationship.Create(s.Value.Primary, s.Value.Secondary), DeltaType.Added, fromBackend)); } return(s); }
public async Task <ValueOrError <bool> > RemoveUser(string name, bool fromBackend = false) { var s = await _visibilityStore.RemoveUser(name, fromBackend); if (s.HasValue) { _userDeltas.OnNext(Delta.Create(User.Create(name), DeltaType.Removed, fromBackend)); } return(s); }
public async Task <ValueOrError <bool> > RemoveSource(string name, bool fromBackend = false) { var s = await _visibilityStore.RemoveSource(name, fromBackend); if (s.HasValue) { _sourceDeltas.OnNext(Delta.Create(Source.Create(name, string.Empty), DeltaType.Removed, fromBackend)); } return(s); }
public async Task <ValueOrError <Source> > AddSource(string name, string description, bool fromBackend = false) { var s = await _visibilityStore.AddSource(name, description, fromBackend); if (s.HasValue) { _sourceDeltas.OnNext(Delta.Create(s.Value, DeltaType.Added, fromBackend)); } return(s); }
public void OneDeltaEachSourcePlusStartupRecap() { var scheduler = new TestScheduler(); //Arrange var sut = new RecapsQuery(); var notifications = new List <NamedRecap>(); //Act var user = User.Create("u1"); var source = Source.Create("a1", "a1"); var cluster = Cluster.Create("c1", new[] { user }); var rca = Relationship.Create(cluster, source); var rcu = Relationship.Create(cluster, user); var clusterSourcesStream = scheduler.CreateColdObservable( Notification.CreateOnNext(Delta.Create(rca, DeltaType.Added)).RecordAt(1) ); var clusterUsersStream = scheduler.CreateColdObservable( Notification.CreateOnNext(Delta.Create(rcu, DeltaType.Added)).RecordAt(2) ); var errorsStream = scheduler.CreateColdObservable( Notification.CreateOnNext(new ErrorPayload(source.SourceId, new Error(), "e1", "")).RecordAt(5) ); sut.Run( new ValueOrError <User>(user), new RunTargets { FrontendNotifier = new StubIFrontendNotifier { RecapStringRecap = (n, r) => { notifications.Add(new NamedRecap { Name = n, Recap = r }); } }, ErrorsInbox = new StubIErrorsInbox { GetErrorsStream = () => errorsStream }, ErrorsBacklogReader = new StubIErrorsBacklogReader() { GetSourcesRecapIEnumerableOfSource = apps => Task.FromResult( new ValueOrError <Recap>( new Recap( DateTime.UtcNow, Enumerable.Empty <Recap.Source>()))) }, VisibilityPersistor = new StubIVisibilityPersistor { GetUserSourcesString = _ => Task.FromResult((IEnumerable <Source>) new[] { source }) }, VisibilityPublisher = new StubIVisibilityPublisher { GetClusterSourcesSequence = () => clusterSourcesStream, GetClusterUsersSequence = () => clusterUsersStream } }); //Asserts Assert.Equal(1, notifications.Count()); //first recap is received during the subscription scheduler.AdvanceBy(1); Assert.Equal(2, notifications.Count()); //1 for initial recap, 1 for adding app, 1 for adding user scheduler.AdvanceBy(1); Assert.Equal(3, notifications.Count()); //1 for initial recap, 1 for adding app, 1 for adding user scheduler.AdvanceBy(1); }