public void IdFieldCreatedEvenIfFieldNotSupplied()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy");

            // Assert
            Assert.IsTrue(sut.FieldReferenceNames.Contains("System.Id", StringComparer.OrdinalIgnoreCase), "System.Id field not present");
        }
        public void IdFieldSetEvenIfFieldNotSupplied()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy");

            // Act
            int ans = (int)sut["System.Id"];

            // Assert
            Assert.AreEqual <int>(1, ans, "System.Id field value not set by constructor");
        }
        public void ConstructorSetsTypeProperty()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy");

            // Act
            string ans = sut.Type;

            // Assert
            Assert.AreEqual <string>("dummy", ans, "Type not set by constructor");
        }
        public void TypePropertyOverriddenByAField()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy", new Tuple <string, object>("System.WorkItemType", "dummy2"));

            // Act
            string ans = sut.Type;

            // Assert
            Assert.AreEqual <string>("dummy2", ans, "IType property not overridden by the field");
        }
        public void ConstructorSetsIdProperty()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy");

            // Act
            int ans = sut.Id;

            // Assert
            Assert.AreEqual <int>(1, ans, "Id not set by constructor");
        }
        public void TypeFieldOverriddenByAField()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy", new Tuple <string, object>("System.WorkItemType", "dummy2"));

            // Act
            string ans = (string)sut["System.WorkItemType"];

            // Assert
            Assert.AreEqual <string>("dummy2", ans, "System.WorkItemType field value not overridden by the field");
        }
        public void TypeFieldSetEvenIfFieldNotSupplied()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy");

            // Act
            string ans = (string)sut["System.WorkItemType"];

            // Assert
            Assert.AreEqual <string>("dummy", ans, "System.WorkItemType field value not set by constructor");
        }
        public void IdPropertyOverriddenByAField()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy", new Tuple <string, object>("System.Id", 2));

            // Act
            int ans = sut.Id;

            // Assert
            Assert.AreEqual <int>(2, ans, "Id property not overridden by the field");
        }
        public void IdFieldOverriddenByAField()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy", new Tuple <string, object>("System.Id", 2));

            // Act
            int ans = (int)sut["System.Id"];

            // Assert
            Assert.AreEqual <int>(2, ans, "System.Id field value not overridden by the field");
        }
        public void CanAddOtherFields()
        {
            // Arrange and Act
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy", new Tuple <string, object>("A.B", 2), new Tuple <string, object>("C.D", "test"));

            // Act
            int ans = (int)sut["System.Id"];

            // Assert
            Assert.IsTrue(sut.FieldReferenceNames.Contains("A.B", StringComparer.OrdinalIgnoreCase), "Other field not present");
            Assert.IsTrue(sut.FieldReferenceNames.Contains("C.D", StringComparer.OrdinalIgnoreCase), "Other field not present");
        }
        public void CanAddOtherFieldsAndGetValues()
        {
            // Arrange and Act
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy", new Tuple <string, object>("A.B", 2), new Tuple <string, object>("C.D", "test"));

            // Act
            int    ans1 = (int)sut["A.B"];
            string ans2 = (string)sut["C.D"];

            // Assert
            Assert.AreEqual <int>(2, ans1, "Other field value not stored correctly");
            Assert.AreEqual <string>("test", ans2, "Other field value not stored correctly");
        }
        public void FieldNamesCaseSensitive()
        {
            // Arrange
            ITfsWorkItem sut = new TfsWorkItemDisconnected(1, "dummy", new Tuple <string, object>("System.Id", 2), new Tuple <string, object>("System.ID", 3));

            // Act
            int ansLower = (int)sut["System.Id"];
            int ansUpper = (int)sut["System.ID"];

            // Assert
            Assert.AreEqual <int>(2, ansLower, "Field name not case sensitive.");
            Assert.AreEqual <int>(3, ansUpper, "Field name not case sensitive.");
        }