private void AssertAllProfilePropertiesDontChangeExceptEndpoints(
     ProfileWithDefinition original,
     ProfileWithDefinition actual)
 {
     Assert.AreEqual(original.DomainName, actual.DomainName);
     Assert.AreEqual(original.Name, actual.Name);
     Assert.AreEqual(original.LoadBalancingMethod, actual.LoadBalancingMethod);
     Assert.AreEqual(original.MonitorPort, actual.MonitorPort);
     Assert.AreEqual(original.Status, actual.Status);
     Assert.AreEqual(original.MonitorRelativePath, actual.MonitorRelativePath);
     Assert.AreEqual(original.TimeToLiveInSeconds, actual.TimeToLiveInSeconds);
 }
        public void ProcessSetProfileTestAllArgs()
        {
            // Setup
            ProfileWithDefinition oldProfileWithDefinition = defaultProfileWithDefinition;

            var newProfileWithDefinition = new ProfileWithDefinition
            {
                DomainName = ProfileDomainName,
                Name = ProfileName,
                Endpoints = new List<TrafficManagerEndpoint>(),
                LoadBalancingMethod = NewLoadBalancingMethod,
                MonitorPort = NewMonitorPort,
                Status = ProfileDefinitionStatus.Enabled,
                MonitorRelativePath = NewMonitorRelativePath,
                MonitorProtocol = NewMonitorProtocol,
                TimeToLiveInSeconds = NewTtl
            };


            var newMonitor = new DefinitionMonitor
                {
                    HttpOptions = new DefinitionMonitorHTTPOptions
                        {
                            ExpectedStatusCode = MonitorExpectedStatusCode,
                            RelativePath = NewMonitorRelativePath,
                            Verb = Verb
                        }
                };

            var updateDefinitionCreateParameters = new DefinitionCreateParameters
                {
                    DnsOptions = new DefinitionDnsOptions
                        {
                            TimeToLiveInSeconds = NewTtl
                        },
                    Policy = new DefinitionPolicyCreateParameters
                        {
                            LoadBalancingMethod = NewLoadBalancingMethod,
                            Endpoints = new DefinitionEndpointCreateParameters[0]
                        },
                    Monitors = new[] { newMonitor }
                };

            clientMock
                .Setup(c => c.AssignDefinitionToProfile(ProfileName, It.IsAny<DefinitionCreateParameters>()))
                .Returns(newProfileWithDefinition);

            clientMock
                .Setup(c => c.InstantiateTrafficManagerDefinition(
                NewLoadBalancingMethod.ToString(),
                NewMonitorPort,
                NewMonitorProtocol.ToString(),
                NewMonitorRelativePath,
                NewTtl,
                oldProfileWithDefinition.Endpoints))
                .Returns(updateDefinitionCreateParameters);

            cmdlet = new SetAzureTrafficManagerProfile
                {
                    Name = ProfileName,
                    LoadBalancingMethod = NewLoadBalancingMethod.ToString(),
                    MonitorPort = NewMonitorPort,
                    MonitorProtocol = NewMonitorProtocol.ToString(),
                    MonitorRelativePath = NewMonitorRelativePath,
                    Ttl = NewTtl,
                    TrafficManagerClient = clientMock.Object,
                    CommandRuntime = mockCommandRuntime,
                    TrafficManagerProfile = oldProfileWithDefinition
                };


            // Action
            cmdlet.ExecuteCmdlet();
            var actual = mockCommandRuntime.OutputPipeline[0] as ProfileWithDefinition;

            // Assert
            Assert.IsNotNull(actual);
            Assert.AreEqual(newProfileWithDefinition.Name, actual.Name);
            Assert.AreEqual(newProfileWithDefinition.DomainName, actual.DomainName);
            Assert.AreEqual(newProfileWithDefinition.LoadBalancingMethod, actual.LoadBalancingMethod);
            Assert.AreEqual(newProfileWithDefinition.MonitorPort, actual.MonitorPort);
            Assert.AreEqual(newProfileWithDefinition.MonitorProtocol, actual.MonitorProtocol);
            Assert.AreEqual(newProfileWithDefinition.MonitorRelativePath, actual.MonitorRelativePath);
            Assert.AreEqual(newProfileWithDefinition.TimeToLiveInSeconds, actual.TimeToLiveInSeconds);

            // Most important assert; the cmdlet is passing the right parameters
            clientMock.Verify(c => c.InstantiateTrafficManagerDefinition(
                NewLoadBalancingMethod.ToString(),
                NewMonitorPort,
                NewMonitorProtocol.ToString(),
                NewMonitorRelativePath,
                NewTtl,
                oldProfileWithDefinition.Endpoints), Times.Once());
        }