public async Task FileRepository_FileChanged_UpdatesData() { IClient testClient = CreateClient(); IProduct product = CreateProduct(); System.IO.File.Delete(TEST_FILE); using FileRepository repo = new FileRepository(); Assert.IsTrue(repo.OpenRepository(TEST_FILE).GetAwaiter().GetResult()); await repo.CreateClient( testClient.Username, testClient.FirstName, testClient.LastName, testClient.Street, testClient.StreetNumber, testClient.PhoneNumber); await repo.CreateProduct(product.Name, product.Price, product.ProductType); string fileData = System.IO.File.ReadAllText(TEST_FILE); await repo.RemoveClient(testClient); await repo.RemoveProduct((await repo.GetAllProducts()).First()); Assert.AreEqual(0, (await repo.GetAllClients()).Count); Assert.AreEqual(0, (await repo.GetAllProducts()).Count); bool clientsReplaced = false; bool productsReplaced = false; TestObserver obs = new TestObserver(); using IDisposable clientUnsubscriber = repo.Subscribe((IObserver <DataChanged <IClient> >)obs); using IDisposable productUnsubscriber = repo.Subscribe((IObserver <DataChanged <IProduct> >)obs); System.IO.File.WriteAllText(TEST_FILE, fileData); SpinWait.SpinUntil(() => { clientsReplaced |= obs.ClientsReplaced(); productsReplaced |= obs.ProductsReplaced(); return(clientsReplaced && productsReplaced); }, UPDATE_TIMEOUT); Assert.IsTrue(clientsReplaced); Assert.IsTrue(productsReplaced); }