csharp/aspnet/AspNetWebHooks/test/Microsoft.AspNet.WebHooks.Common.Test/Extensions/DependencyScopeExtensionsTests.cs

DependencyScopeExtensionsTests.cs
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Collections.Generic;
using System.Web.Http.Dependencies;
using Microsoft.AspNet.WebHooks.Config;
using Microsoft.AspNet.WebHooks.Diagnostics;
using Microsoft.AspNet.WebHooks.Services;
using Moq;
using Xunit;

namespace Microsoft.AspNet.WebHooks
{
    [Collection("ConfigCollection")]
    public clast DependencyScopeExtensionsTests
    {
        private Mock _resolverMock;
        private IDependencyScope _resolver;
        private Service _service1, _service2;

        public DependencyScopeExtensionsTests()
        {
            _resolverMock = new Mock();
            _resolver = _resolverMock.Object;
            _service1 = new Service();
            _service2 = new Service();
            CommonServices.Reset();
        }

        [Fact]
        public void GetLogger_ReturnsDependencyInstance_IfRegistered()
        {
            // Arrange
            Mock instanceMock = new Mock();
            _resolverMock.Setup(r => r.GetService(typeof(ILogger)))
                .Returns(instanceMock.Object)
                .Verifiable();

            // Act
            ILogger actual = _resolverMock.Object.GetLogger();

            // astert
            astert.Same(instanceMock.Object, actual);
            instanceMock.Verify();
        }

        [Fact]
        public void GetLogger_ReturnsDefaultInstance_IfNoneRegistered()
        {
            // Act
            ILogger actual = _resolverMock.Object.GetLogger();

            // astert
            astert.IsType(actual);
        }

        [Fact]
        public void GetSettings_ReturnsDependencyInstance_IfRegistered()
        {
            // Arrange
            SettingsDictionary instance = new SettingsDictionary();
            instance["key"] = "value";
            _resolverMock.Setup(r => r.GetService(typeof(SettingsDictionary)))
                .Returns(instance)
                .Verifiable();

            // Act
            SettingsDictionary actual = _resolverMock.Object.GetSettings();

            // astert
            astert.Same(instance, actual);
            _resolverMock.Verify();
        }

        [Fact]
        public void GetSettings_ReturnsDefaultInstance_IfNoneRegistered()
        {
            // Act
            SettingsDictionary actual = _resolverMock.Object.GetSettings();

            // astert
            astert.IsType(actual);
        }

        [Fact]
        public void GetSettings_ReturnsDefaultInstance_IfEmptyDictionaryRegistered()
        {
            // Arrange
            SettingsDictionary instance = new SettingsDictionary();
            instance.Clear();
            _resolverMock.Setup(r => r.GetService(typeof(SettingsDictionary)))
                .Returns(instance)
                .Verifiable();

            // Act
            SettingsDictionary actual = _resolverMock.Object.GetSettings();

            // astert
            astert.NotSame(instance, actual);
            _resolverMock.Verify();
        }

        [Fact]
        public void GetService_ReturnsNull_IfServiceNotFound()
        {
            Service actual = _resolver.GetService();
            astert.Null(actual);
        }

        [Fact]
        public void GetService_ReturnsService()
        {
            _resolverMock.Setup(r => r.GetService(typeof(Service)))
                .Returns(_service1)
                .Verifiable();

            Service actual = _resolver.GetService();

            _resolverMock.Verify();
            astert.Same(_service1, actual);
        }

        [Fact]
        public void GetServices_ReturnsEmpty_IfServiceNotFound()
        {
            IEnumerable actual = _resolver.GetServices();
            astert.Empty(actual);
        }

        [Fact]
        public void GetServices_ReturnsServices()
        {
            var services = new[] { _service1, _service2 };
            _resolverMock.Setup(r => r.GetServices(typeof(Service)))
                .Returns(services)
                .Verifiable();

            IEnumerable actual = _resolver.GetServices();

            _resolverMock.Verify();
            astert.Equal(services, actual);
        }

        private clast Service
        {
        }
    }
}