public void GivenSomeTokenWithNoExtraData_ReturnsNullIfTokenValid()
            {
                // Arrange.
                var antiForgery = new AntiForgery();
                var guid = Guid.NewGuid();
                var token = guid.ToString();

                // Act.
                var result = antiForgery.ValidateToken(token, token);

                // Assert.
                Assert.Null(result);
            }
            public void GivenSomeTokenWhichHasAGuidAndExtraData_ValidateToken_ReturnsATokenData()
            {
                // Arrange.
                var antiForgery = new AntiForgery();
                var guid = Guid.NewGuid();
                var token = guid.ToString();

                // Act.
                var result = antiForgery.ValidateToken(token);

                // Assert.
                Assert.NotNull(result);
                Assert.Equal(guid.ToString(), result.State);
                Assert.Null(result.ExtraData);
            }
            public void GivenSomeTokenWithExtraData_ReturnsExtraDataIfTokenValid()
            {
                // Arrange.
                const string expectedExtraData = "/abc/123";
                var antiForgery = new AntiForgery();
                var guid = Guid.NewGuid();
                var token = guid.ToString();
                string kept = String.Format("{0}|{1}", token, Convert.ToBase64String(Encoding.UTF8.GetBytes(expectedExtraData)));

                // Act.
                var actualExtraData = antiForgery.ValidateToken(kept, token);
 
                 // Assert.
                Assert.Equal(expectedExtraData, actualExtraData);
            }
            public void GivenSomeTokenWithNoExtraData_ThrowsIfTokenInvalid()
            {
                // Arrange.
                var antiForgery = new AntiForgery();
                var guid = Guid.NewGuid();
                var token = guid.ToString();

                // Act/Assert.
                Assert.Throws<AuthenticationException>(() => antiForgery.ValidateToken(token, "YOU'VE BEEN HAXED SUCKA!"));
            }
            public void GivenSomeBadExtraData_ValidateToken_ReturnsABaddaBingBaddaBoom()
            {
                // Arrange.
                var antiForgery = new AntiForgery();
                const string badToken = "MultiPass|Bzzzzzt";

                // Act.
                var result = Assert.Throws<FormatException>(() => antiForgery.ValidateToken(badToken, "MultiPass"));

                // Assert.
                Assert.NotNull(result);
                Assert.Equal("Invalid length for a Base-64 char array or string.", result.Message);
            }
            public void GivenSomeTokenWithExtraData_ThrowsIfTokenInvalid()
            {
                // Arrange.
                const string expectedExtraData = "/abc/123";
                var antiForgery = new AntiForgery();
                var guid = Guid.NewGuid();
                var token = guid.ToString();
                string kept = String.Format("{0}|{1}", token, Convert.ToBase64String(Encoding.UTF8.GetBytes(expectedExtraData)));

                // Act/Assert.
                Assert.Throws<AuthenticationException>(() => antiForgery.ValidateToken(token, "YOU'VE BEEN HAXED SUCKA!"));
             }