using Microsoft.VisualStudio.TestTools.UnitTesting; using Be.Timvw.Framework.Domain; using System; using System.Collections.Generic; using System.Collections; namespace Be.Timvw.Framework.Tests.Domain { [TestClass] public class EffectivityManagerTester { #region Add Tests [TestMethod] public void TestAddEffectivitySingle() { List> expectedEffectivities = new List>(); expectedEffectivities.Add(new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), DateTime.MaxValue))); IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity actualEffectivity = effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); AssertAreEqualEffectivities(expectedEffectivities[0], actualEffectivity); Assert.AreEqual(expectedEffectivities.Count, effectivityManager.Count); for (int i = 0; i < expectedEffectivities.Count; ++i) { AssertAreEqualEffectivities(expectedEffectivities[i], effectivityManager[i]); } } [TestMethod] public void TestAddEffectivityAddOneBeforeExisting() { List> expectedEffectivities = new List>(); expectedEffectivities.Add(new Effectivity("1999-01", new Range(new DateTime(1999, 1, 1), new DateTime(2000, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), DateTime.MaxValue))); IEffectivityManager effectivityManager = new EffectivityManager(); effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); IEffectivity actualEffectivity = effectivityManager.Add("1999-01", new DateTime(1999, 1, 1)); AssertAreEqualEffectivities(expectedEffectivities[0], actualEffectivity); Assert.AreEqual(expectedEffectivities.Count, effectivityManager.Count); for (int i = 0; i < expectedEffectivities.Count; ++i) { AssertAreEqualEffectivities(expectedEffectivities[i], effectivityManager[i]); } } [TestMethod] public void TestAddEffectivityAddOneInExisting() { List> expectedEffectivities = new List>(); expectedEffectivities.Add(new Effectivity("1999-01", new Range(new DateTime(1999, 1, 1), new DateTime(2000, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), new DateTime(2001, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2001-01", new Range(new DateTime(2001, 1, 1), DateTime.MaxValue))); IEffectivityManager effectivityManager = new EffectivityManager(); effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); effectivityManager.Add("1999-01", new DateTime(1999, 1, 1)); IEffectivity actualEffectivity = effectivityManager.Add("2001-01", new DateTime(2001, 1, 1)); AssertAreEqualEffectivities(expectedEffectivities[2], actualEffectivity); Assert.AreEqual(expectedEffectivities.Count, effectivityManager.Count); for (int i = 0; i < expectedEffectivities.Count; ++i) { AssertAreEqualEffectivities(expectedEffectivities[i], effectivityManager[i]); } } [TestMethod] public void TestAddEffectivityAddAnotherOneInExisting() { List> expectedEffectivities = new List>(); expectedEffectivities.Add(new Effectivity("1999-01", new Range(new DateTime(1999, 1, 1), new DateTime(2000, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), new DateTime(2000, 4, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2000-04", new Range(new DateTime(2000, 4, 1), new DateTime(2001, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2001-01", new Range(new DateTime(2001, 1, 1), DateTime.MaxValue))); IEffectivityManager effectivityManager = new EffectivityManager(); effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); effectivityManager.Add("1999-01", new DateTime(1999, 1, 1)); effectivityManager.Add("2001-01", new DateTime(2001, 1, 1)); IEffectivity actualEffectivity = effectivityManager.Add("2000-04", new DateTime(2000, 4, 1)); AssertAreEqualEffectivities(expectedEffectivities[2], actualEffectivity); Assert.AreEqual(expectedEffectivities.Count, effectivityManager.Count); for (int i = 0; i < expectedEffectivities.Count; ++i) { AssertAreEqualEffectivities(expectedEffectivities[i], effectivityManager[i]); } } [TestMethod] public void TestAddEffectivityAddAndAnEffectivityIsRemoved() { List> expectedEffectivities = new List>(); expectedEffectivities.Add(new Effectivity("1999-01", new Range(new DateTime(1999, 1, 1), new DateTime(2000, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2000-01-x", new Range(new DateTime(2000, 1, 1), new DateTime(2000, 4, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2000-04", new Range(new DateTime(2000, 4, 1), new DateTime(2001, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2001-01", new Range(new DateTime(2001, 1, 1), DateTime.MaxValue))); IEffectivityManager effectivityManager = new EffectivityManager(); effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); effectivityManager.Add("1999-01", new DateTime(1999, 1, 1)); effectivityManager.Add("2001-01", new DateTime(2001, 1, 1)); effectivityManager.Add("2000-04", new DateTime(2000, 4, 1)); IEffectivity actualEffectivity = effectivityManager.Add("2000-01-x", new DateTime(2000, 1, 1)); AssertAreEqualEffectivities(expectedEffectivities[1], actualEffectivity); Assert.AreEqual(expectedEffectivities.Count, effectivityManager.Count); for (int i = 0; i < expectedEffectivities.Count; ++i) { AssertAreEqualEffectivities(expectedEffectivities[i], effectivityManager[i]); } } #endregion #region Remove Tests [TestMethod] public void TestRemoveUnexistingItem() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity item = new Effectivity("1999-01", new Range(new DateTime(1999, 1, 1), new DateTime(2000, 1, 1))); Assert.IsFalse(effectivityManager.Remove(item)); } [TestMethod] public void TestRemoveExistingItem() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity item = effectivityManager.Add("1999-01", new DateTime(1999, 1, 1)); Assert.IsTrue(effectivityManager.Remove(item)); Assert.AreEqual(0, effectivityManager.Count); } [TestMethod] public void TestRemoveFirstItem() { List> expectedEffectivities = new List>(); expectedEffectivities.Add(new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), new DateTime(2000, 4, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2000-04", new Range(new DateTime(2000, 4, 1), new DateTime(2001, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2001-01", new Range(new DateTime(2001, 1, 1), DateTime.MaxValue))); IEffectivityManager effectivityManager = new EffectivityManager(); effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); IEffectivity item = effectivityManager.Add("1999-01", new DateTime(1999, 1, 1)); effectivityManager.Add("2001-01", new DateTime(2001, 1, 1)); effectivityManager.Add("2000-04", new DateTime(2000, 4, 1)); Assert.IsTrue(effectivityManager.Remove(item)); for (int i = 0; i < expectedEffectivities.Count; ++i) { AssertAreEqualEffectivities(expectedEffectivities[i], effectivityManager[i]); } } [TestMethod] public void TestRemoveUpdateAndUpdatePreviousItem() { List> expectedEffectivities = new List>(); expectedEffectivities.Add(new Effectivity("1999-01", new Range(new DateTime(1999, 1, 1), new DateTime(2000, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), new DateTime(2001, 1, 1).AddTicks(-1)))); expectedEffectivities.Add(new Effectivity("2001-01", new Range(new DateTime(2001, 1, 1), DateTime.MaxValue))); IEffectivityManager effectivityManager = new EffectivityManager(); effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); effectivityManager.Add("1999-01", new DateTime(1999, 1, 1)); effectivityManager.Add("2001-01", new DateTime(2001, 1, 1)); IEffectivity item = effectivityManager.Add("2000-04", new DateTime(2000, 4, 1)); Assert.IsTrue(effectivityManager.Remove(item)); for (int i = 0; i < expectedEffectivities.Count; ++i) { AssertAreEqualEffectivities(expectedEffectivities[i], effectivityManager[i]); } } #endregion #region TryGetSnapshot Tests [TestMethod] public void TestTryGetSnapshotFound() { IEffectivityManager effectivityManager = GetEffectivityManager(); DateTime validityDate = new DateTime(2000, 1, 15); IEnumerator> enumerator = effectivityManager.GetEnumerator(); enumerator.MoveNext(); IEffectivity expectedEffectivity = enumerator.Current; IEffectivity actualEffectivity; bool result = effectivityManager.TryGetSnapshot(validityDate, out actualEffectivity); Assert.IsTrue(result); Assert.AreEqual(expectedEffectivity, actualEffectivity); } [TestMethod] public void TestTryGetSnapshotNotFound() { IEffectivityManager effectivityManager = GetEffectivityManager(); DateTime validityDate = new DateTime(1999, 1, 15); IEffectivity expectedEffectivity = default(IEffectivity); IEffectivity actualEffectivity; bool result = effectivityManager.TryGetSnapshot(validityDate, out actualEffectivity); Assert.IsFalse(result); Assert.AreEqual(expectedEffectivity, actualEffectivity); } #endregion #region GetSnapshot Tests [TestMethod] public void TestGetSnapshotFound() { IEffectivityManager effectivityManager = GetEffectivityManager(); DateTime validityDate = new DateTime(2000, 1, 15); IEnumerator> enumerator = effectivityManager.GetEnumerator(); enumerator.MoveNext(); IEffectivity expectedEffectivity = enumerator.Current; IEffectivity actualEffectivity = effectivityManager.GetSnapshot(validityDate); Assert.AreEqual(expectedEffectivity, actualEffectivity); } [TestMethod, ExpectedException(typeof(ArgumentOutOfRangeException))] public void TestGetSnapshotNotFound() { IEffectivityManager effectivityManager = GetEffectivityManager(); DateTime validityDate = new DateTime(1999, 1, 15); effectivityManager.GetSnapshot(validityDate); } #endregion #region IList Tests [TestMethod] public void TestIndexOf() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity item = new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), DateTime.MaxValue)); Assert.AreEqual(-1, effectivityManager.IndexOf(item)); } [TestMethod, ExpectedException(typeof(NotSupportedException))] public void TestInsert() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity item = new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), DateTime.MaxValue)); effectivityManager.Insert(0, item); } [TestMethod] public void TestRemoveAt() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity item = effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); effectivityManager.RemoveAt(0); Assert.AreEqual(0, effectivityManager.Count); } [TestMethod, ExpectedException(typeof(NotSupportedException))] public void TestIndexSetter() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity item = new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), DateTime.MaxValue)); effectivityManager[0] = item; } #endregion #region ICollection Tests [TestMethod, ExpectedException(typeof(NotSupportedException))] public void TestAdd() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity item = new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), DateTime.MaxValue)); effectivityManager.Add(item); } [TestMethod] public void TestClear() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity item = effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); effectivityManager.Clear(); Assert.AreEqual(0, effectivityManager.Count); } [TestMethod] public void TestContains() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity item = new Effectivity("2000-01", new Range(new DateTime(2000, 1, 1), DateTime.MaxValue)); Assert.IsFalse(effectivityManager.Contains(item)); } [TestMethod] public void TestCopyTo() { IEffectivityManager effectivityManager = new EffectivityManager(); IEffectivity[] target = new IEffectivity[0]; effectivityManager.CopyTo(target, 0); Assert.AreEqual(0, target.Length); } [TestMethod] public void TestIsReadOnly() { IEffectivityManager effectivityManager = new EffectivityManager(); Assert.IsFalse(effectivityManager.IsReadOnly); } #endregion #region IEnumerable Tests [TestMethod] public void TestGetEnumerator() { IEffectivityManager effectivityManager = new EffectivityManager(); IEnumerator enumerator = ((IEnumerable)effectivityManager).GetEnumerator(); Assert.IsFalse(enumerator.MoveNext()); } #endregion #region Private Members private static void AssertAreEqualEffectivities(IEffectivity expectedEffectivity, IEffectivity actualEffectivity) { Assert.AreEqual(expectedEffectivity.GetType(), actualEffectivity.GetType()); Assert.AreEqual(expectedEffectivity.Element, actualEffectivity.Element); Assert.AreEqual(expectedEffectivity.ValidityPeriod, actualEffectivity.ValidityPeriod); } private static IEffectivityManager GetEffectivityManager() { IEffectivityManager effectivityManager = new EffectivityManager(); effectivityManager.Add("2000-01", new DateTime(2000, 1, 1)); return effectivityManager; } #endregion } }