예제 #1
0
        public async Task Construction_without_parameter_is_allowed_and_returns_null()
        {
            var provider = new ChainedAvatarProvider();

            var image = await provider.GetAvatarAsync(_email1, _name1, _size);

            Assert.Null(image);
        }
예제 #2
0
        public async Task Return_first_non_null_result()
        {
            var provider1 = Substitute.For <IAvatarProvider>();
            var provider2 = Substitute.For <IAvatarProvider>();
            var provider3 = Substitute.For <IAvatarProvider>();

            // Register different images (for the same parameters)
            // for each provider. This allows us to detect incorrect results.

            // Case 1: First provider hit
            provider1.GetAvatarAsync(_email1, _name1, _size).Returns(_img1);
            provider2.GetAvatarAsync(_email1, _name1, _size).Returns(_img2);
            provider3.GetAvatarAsync(_email1, _name1, _size).Returns(_img3);

            // Case 2: Second provider hit
            provider1.GetAvatarAsync(_email2, _name2, _size).Returns((Image)null);
            provider2.GetAvatarAsync(_email2, _name2, _size).Returns(_img4);
            provider3.GetAvatarAsync(_email2, _name2, _size).Returns(_img5);

            // Case 3: Third provider hit
            provider1.GetAvatarAsync(_email3, _name3, _size).Returns((Image)null);
            provider2.GetAvatarAsync(_email3, _name3, _size).Returns((Image)null);
            provider3.GetAvatarAsync(_email3, _name3, _size).Returns(_img6);

            // Case 4: No provider hit
            provider1.GetAvatarAsync(_email4, _name4, _size).Returns((Image)null);
            provider2.GetAvatarAsync(_email4, _name4, _size).Returns((Image)null);
            provider3.GetAvatarAsync(_email4, _name4, _size).Returns((Image)null);

            var chainedProvider = new ChainedAvatarProvider(provider1, provider2, provider3);

            var res1 = await chainedProvider.GetAvatarAsync(_email1, _name1, _size);

            var res2 = await chainedProvider.GetAvatarAsync(_email2, _name2, _size);

            var res3 = await chainedProvider.GetAvatarAsync(_email3, _name3, _size);

            var res4 = await chainedProvider.GetAvatarAsync(_email4, _name4, _size);

            Assert.AreSame(_img1, res1);
            Assert.AreSame(_img4, res2);
            Assert.AreSame(_img6, res3);
            Assert.AreSame(null, res4);
        }