public void ChangeStockDuplicateAsxCodeInThePast() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stock2 = new Stock(Guid.NewGuid()); stock2.List("ABC", "Different stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); stock2.DeList(new Date(1999, 01, 01)); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); stockCache.Add(stock2); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); stockRepository.Setup(x => x.Update(stock)).Verifiable(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.ChangeStock(id, new Date(2000, 01, 01), "ABC", "ABC Pty Ltd", AssetCategory.AustralianFixedInterest); result.Should().HaveOkStatus(); mockRepository.Verify(); }
public void ChangeStockDuplicateAsxCode() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stock2 = new Stock(Guid.NewGuid()); stock2.List("ABC", "Different stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); stockCache.Add(stock2); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.ChangeStock(id, new Date(2000, 01, 01), "ABC", "ABC Pty Ltd", AssetCategory.AustralianFixedInterest); result.Should().HaveErrorStatus().WithError("A stock already exists with code ABC on 1/1/2000"); mockRepository.Verify(); }
public void Modify() { const int COUNT = 1000000; var cache = new EntityCache { BucketCount = COUNT / 7 }; Assert.AreEqual(0, cache.Count); for (int i = 0; i < COUNT; i++) { cache.Add(new EntityBase { ID = ObjectId.GenerateNewId() }); } Assert.AreEqual(COUNT, cache.Count); var entity1 = new EntityBase { ID = new ObjectId("5f32355b2fb32d25b863350f") }; cache.Add(entity1); Assert.AreEqual(COUNT + 1, cache.Count); Assert.AreEqual(entity1, cache.Remove(entity1.ID)); Assert.AreEqual(COUNT, cache.Count); Assert.AreEqual(null, cache.Replace(entity1));// 之前不存在,不能替换 Assert.AreEqual(null, cache.AddOrReplace(entity1)); Assert.AreEqual(entity1, cache.AddOrReplace(entity1)); Assert.AreEqual(entity1, cache.Replace(entity1)); Assert.AreEqual(COUNT + 1, cache.Count); Assert.AreEqual(entity1, cache.Get(entity1.ID)); }
public async Task EntityCache_Multiple() { using (EntityCache entityCache = new EntityCache()) { Uri uri = new Uri("http://test/doc"); entityCache.Add(TestJson.BasicGraph, uri); Uri uri2 = new Uri("http://test/doc2"); entityCache.Add(TestJson.BasicGraph2, uri2); Assert.True(entityCache.HasPageOfEntity(uri)); Assert.True(entityCache.HasPageOfEntity(new Uri("http://test/doc#c"))); Assert.True(entityCache.HasPageOfEntity(new Uri("http://test/doc#nonexist"))); Assert.False(entityCache.HasPageOfEntity(new Uri("http://test/docnonexist"))); Assert.True(entityCache.HasPageOfEntity(uri2)); Assert.True(entityCache.HasPageOfEntity(new Uri("http://test/doc2#c"))); Assert.True(entityCache.HasPageOfEntity(new Uri("http://test/doc2#nonexist"))); Assert.False(entityCache.HasPageOfEntity(new Uri("http://test/doc2nonexist"))); Assert.False(entityCache.HasPageOfEntity(new Uri("http://test/docA"))); var root = await entityCache.GetEntity(uri); Assert.Equal("test", root["name"]); } }
public void TestAdd() { var person = new Person(14, "Mark"); _entityCache.Add(person); Assert.AreEqual(person, _entityCache.Get(14)); _entityCache.Remove(14); }
public void GetEntityNotInCache() { var cache = new EntityCache <TestEntity>(); cache.Add(new TestEntity(Guid.NewGuid())); cache.Add(new TestEntity(Guid.NewGuid())); var result = cache.Get(Guid.NewGuid()); result.Should().BeNull(); }
public void GetEntityInCache() { var cache = new EntityCache <TestEntity>(); var entity = new TestEntity(Guid.NewGuid()); cache.Add(new TestEntity(Guid.NewGuid())); cache.Add(entity); var result = cache.Get(entity.Id); result.Should().Be(entity); }
public void Add() { var cache = new EntityCache <TestEntity>(); var entity = new TestEntity(Guid.NewGuid()); cache.Add(entity); var entity2 = new TestEntity(Guid.NewGuid()); cache.Add(entity2); cache.All().Should().BeEquivalentTo(new[] { entity, entity2 }); }
public void AddEntityWithSameIdInCache() { var cache = new EntityCache <TestEntity>(); var id = Guid.NewGuid(); var entity = new TestEntity(id); cache.Add(entity); var entity2 = new TestEntity(id); cache.Add(entity2); cache.All().Should().HaveCount(1); }
public void ChangeDividendRulesTaxRateGreaterThan100Percent() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.ChangeDividendRules(id, new Date(2000, 01, 01), 1.30m, RoundingRule.Round, true, DrpMethod.Round); result.Should().HaveErrorStatus().WithError("Company tax rate must be between 0 and 1"); mockRepository.Verify(); }
public void ChangeStockWithLaterChangeExisting() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); stock.ChangeProperties(new Date(2002, 01, 01), "XYZ", "New Name", AssetCategory.AustralianFixedInterest); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.ChangeStock(id, new Date(2000, 01, 01), "ABC", "ABC Pty Ltd", AssetCategory.AustralianFixedInterest); result.Should().HaveErrorStatus().WithError("A later change has been made on 1/1/2002"); mockRepository.Verify(); }
public void ChangeStock() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); stockRepository.Setup(x => x.Update(stock)).Verifiable(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.ChangeStock(id, new Date(2000, 01, 01), "ABC", "ABC Pty Ltd", AssetCategory.AustralianProperty); using (new AssertionScope()) { result.Should().HaveOkStatus(); stock.Properties[new Date(2000, 01, 01)].Should().BeEquivalentTo(new { AsxCode = "ABC", Name = "ABC Pty Ltd", Category = AssetCategory.AustralianProperty }); } mockRepository.Verify(); }
public void ChangeStockDelisted() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); stock.DeList(new Date(1999, 01, 01)); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.ChangeStock(id, new Date(2000, 01, 01), "ABC", "ABC Pty Ltd", AssetCategory.AustralianFixedInterest); result.Should().HaveErrorStatus().WithError("Stock is delisted"); mockRepository.Verify(); }
public void ChangeDividendRules() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); stockRepository.Setup(x => x.Update(stock)).Verifiable(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.ChangeDividendRules(id, new Date(2000, 01, 01), 0.50m, RoundingRule.Round, true, DrpMethod.Round); using (new AssertionScope()) { result.Should().HaveOkStatus(); var dividendRules = stock.DividendRules[new Date(2000, 01, 01)]; dividendRules.Should().BeEquivalentTo(new { CompanyTaxRate = 0.50m, DividendRoundingRule = RoundingRule.Round, DrpActive = true, DrpMethod = DrpMethod.Round }); } mockRepository.Verify(); }
public async Task EntityCache_CleanUp_InUse() { using (EntityCache entityCache = new EntityCache(TimeSpan.FromSeconds(1))) { Uri uri = new Uri("http://test/doc"); entityCache.Add(TestJson.BasicGraph, uri); Stopwatch timer = new Stopwatch(); timer.Start(); while (timer.Elapsed.TotalSeconds < 5) { // the cache should not clear while we are using it var token = await entityCache.GetEntity(new Uri("http://test/doc")); Assert.NotNull(token); } Thread.Sleep(2000); var token2 = await entityCache.GetEntity(new Uri("http://test/doc")); Assert.Null(token2); } }
public void ClearEmptyCache() { var cache = new EntityCache <TestEntity>(); var entity = new TestEntity(Guid.NewGuid()); cache.Add(entity); var entity2 = new TestEntity(Guid.NewGuid()); cache.Add(entity2); cache.Clear(); cache.All().Should().BeEmpty(); }
public void ListStockDuplicateAsxCodeInThePast() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(Guid.NewGuid()); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); stock.DeList(new Date(1999, 06, 30)); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); stockRepository.Setup(x => x.Get(id)).Returns(default(Stock)); stockRepository.Setup(x => x.Add(It.IsAny <Stock>())).Verifiable(); var stockPriceHistoryCache = new EntityCache <StockPriceHistory>(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); stockPriceHistoryRepository.Setup(x => x.Add(It.IsAny <StockPriceHistory>())).Verifiable(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache, stockPriceHistoryRepository.Object); var result = service.ListStock(id, "XYZ", "XYZ Pty Ltd", new Date(2000, 01, 01), true, AssetCategory.AustralianFixedInterest); result.Should().HaveOkStatus(); mockRepository.Verify(); }
public void ChangeDividendRulesStockNotActive() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); stock.DeList(new Date(1999, 06, 30)); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.ChangeDividendRules(id, new Date(2000, 01, 01), 0.30m, RoundingRule.Round, true, DrpMethod.Round); result.Should().HaveErrorStatus().WithError("Stock is not active at 1/1/2000"); mockRepository.Verify(); }
public void UpdateClosingPricesNegativePrice() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var prices = new StockPrice[] { new StockPrice(new Date(2000, 01, 01), 0.10m), new StockPrice(new Date(2000, 01, 02), -0.20m), new StockPrice(new Date(2000, 01, 03), 0.30m) }; var result = service.UpdateClosingPrices(id, prices); result.Should().HaveErrorStatus("Closing price on 2/01/2000 is negative"); mockRepository.Verify(); }
public void ListStockDuplicateAsxCode() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(Guid.NewGuid()); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); stockRepository.Setup(x => x.Get(id)).Returns(default(Stock)); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.ListStock(id, "XYZ", "XYZ Pty Ltd", new Date(2000, 01, 01), true, AssetCategory.AustralianFixedInterest); result.Should().HaveErrorStatus().WithError("A stock already exists with the code XYZ on 1/1/2000"); mockRepository.Verify(); }
public void UpdateCurrentPrice() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stockPriceHistory = new StockPriceHistory(id); stock.SetPriceHistory(stockPriceHistory); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); var stockPriceHistoryCache = new EntityCache <StockPriceHistory>(); stockPriceHistoryCache.Add(stockPriceHistory); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache, stockPriceHistoryRepository.Object); var result = service.UpdateCurrentPrice(id, 10.00m); using (new AssertionScope()) { result.Should().HaveOkStatus(); stock.GetPrice(Date.Today).Should().Be(10.00m); } mockRepository.Verify(); }
public void UpdateCurrentPriceNegativePrice() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.UpdateCurrentPrice(id, -10.00m); result.Should().HaveErrorStatus("Price is negative"); mockRepository.Verify(); }
public void DeListStock() { var mockRepository = new MockRepository(MockBehavior.Strict); var id = Guid.NewGuid(); var stock = new Stock(id); stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest); var stockCache = new EntityCache <Stock>(); stockCache.Add(stock); var stockQuery = new StockQuery(stockCache); var stockRepository = mockRepository.Create <IRepository <Stock> >(); stockRepository.Setup(x => x.Update(stock)).Verifiable(); var stockPriceHistoryCache = mockRepository.Create <IEntityCache <StockPriceHistory> >(); var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >(); var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object); var result = service.DelistStock(id, new Date(2000, 01, 01)); using (new AssertionScope()) { result.Should().HaveOkStatus(); stock.EffectivePeriod.ToDate.Should().Be(new Date(2000, 01, 01)); } mockRepository.Verify(); }
///// <summary>格式化参数名</summary> ///// <param name="name">名称</param> ///// <returns></returns> //public virtual String FormatParameterName(String name) => Dal.Db.FormatParameterName(name); #endregion #region 实体操作 /// <summary>把该对象持久化到数据库,添加/更新实体缓存和单对象缓存,增加总计数</summary> /// <param name="entity">实体对象</param> /// <returns></returns> public virtual Int32 Insert(IEntity entity) { var rs = Factory.Persistence.Insert(this, entity); var e = entity as TEntity; // 加入实体缓存 _cache?.Add(e); // 增加计数 if (_Count >= 0) { Interlocked.Increment(ref _Count); } return(rs); }
internal static FastProperty[] CachePropsManager(this Type type) { if (!EntityCache.ContainsKey(type.FullName)) { EntityCache.Add(type.FullName, EnumerableProp(type).ToArray()); } return(EntityCache[type.FullName]); }
public void AddEmptyCache() { var cache = new EntityCache <TestEntity>(); var entity = new TestEntity(Guid.NewGuid()); cache.Add(entity); cache.All().Should().HaveCount(1); }
public void AllSingleItemInCache() { var cache = new EntityCache <TestEntity>(); var entity = new TestEntity(Guid.NewGuid()); cache.Add(entity); cache.All().Should().BeEquivalentTo(new[] { entity }); }
public void TestAddRemove() { var cache = new EntityCache <Role> { Expire = 2 }; var list = cache.Entities; var role = new Role { Name = "test" }; // 添加实体对象 cache.Add(role); var list2 = cache.Entities; Assert.NotEqual(list, list2); Assert.Equal(list.Count + 1, list2.Count); // 删除实体对象,来自内部 cache.Remove(role); var list3 = cache.Entities; Assert.True(list != list3); Assert.True(list2 != list3); Assert.Equal(list.Count, list3.Count); // 删除实体对象,来自外部 cache.Add(role); var role2 = new Role { Name = "test" }; cache.Remove(role2); var list4 = cache.Entities; Assert.True(list != list4); Assert.True(list2 != list4); Assert.Equal(list.Count, list4.Count); }
public async Task EntityCache_FetchNeeded_SamePage() { using (EntityCache entityCache = new EntityCache()) { Uri uri = new Uri("http://test/doc"); entityCache.Add(TestJson.BasicGraph, uri); entityCache.WaitForTasks(); bool?b = await entityCache.FetchNeeded(new Uri("http://test/doc#c"), new Uri[] { new Uri("http://test#prop") }); Assert.Equal(false, b); } }
public bool TestUpdate() { bool res; try { m_Cache.Add(m_Dummy); var original = m_Cache.Get(m_Dummy.Id); var before = original.AvarageGrades; original.AvarageGrades = before + 1; m_Cache.Update(original); var after = m_Cache.Get(m_Dummy.Id).AvarageGrades; res = before != after; } catch { res = false; } return(res); }