public void Initialize_PopulatesAvailableTypes()
        {
            // Arrange.
            var type1 = CreateType("aaa");
            var type2 = CreateType("bbb");
            var viewModel = new SelectChildTypeFieldsViewModel();

            // Act.
            viewModel.Initialize(new[] { type2, type1 }, Enumerable.Empty<IWebMethodCallResultField>());

            // Assert.
            Assert.AreEqual(2, viewModel.AvailableTypes.Count);
            Assert.AreSame(type1, viewModel.AvailableTypes[0]);
            Assert.AreSame(type2, viewModel.AvailableTypes[1]);
            Assert.AreSame(type1, viewModel.SelectedType);
        }
        public void WhenSelectedTypeChanges_AvailableFieldsAreUpdated()
        {
            // Arrange.
            var type1 = CreateType("Type1");
            var field1 = CreateField("Field1", type1);
            Mock.Arrange(() => type1.Fields).Returns(new[] { field1 });

            var type2 = CreateType("Type2");
            var field2 = CreateField("Field2", type2);
            Mock.Arrange(() => type2.Fields).Returns(new[] { field2 });

            var viewModel = new SelectChildTypeFieldsViewModel();
            viewModel.Initialize(new[] { type1, type2 }, Enumerable.Empty<IWebMethodCallResultField>());

            Assert.AreEqual(1, viewModel.AvailableFields.Count);
            Assert.AreSame(field1, viewModel.AvailableFields[0]);

            // Act.
            viewModel.SelectedType = type2;

            // Assert.
            Assert.AreEqual(1, viewModel.AvailableFields.Count);
            Assert.AreSame(field2, viewModel.AvailableFields[0]);
        }
        public void AvailableFields_DoesNotIncludeUsedFields()
        {
            // Arrange.
            var type1 = CreateType("Type1");

            var type2 = CreateType("Type2");
            var field1 = CreateField("Field1", type2);
            var field2 = CreateField("Field2", type2);
            Mock.Arrange(() => type2.Fields).Returns(new[] { field1, field2 });

            var resultField = CreateResultField("Field1", "Type2");

            var viewModel = new SelectChildTypeFieldsViewModel();
            viewModel.Initialize(new[] { type1, type2 }, new[] { resultField });

            // Act.
            viewModel.SelectedType = type2;

            // Assert.
            Assert.AreEqual(1, viewModel.AvailableFields.Count);
            Assert.AreSame(field2, viewModel.AvailableFields[0]);
        }