示例#1
0
        public void ItUsesSandboxDuringFinalization()
        {
            Env.Set("STEAM_USE_MICROTRANSACTION_SANDBOX", true);

            var transaction = new SteamTransactionEntity {
                state = SteamTransactionEntity.InitiatedState
            };

            transaction.Save();

            Http.Fake(Http.Response(new JsonObject {
                ["response"] = new JsonObject {
                    ["result"] = "OK",
                    ["params"] = new JsonObject {
                        ["orderid"] = transaction.orderId,
                        ["transid"] = transaction.transactionId
                    }
                }
            }, 200));

            OnFacet <SteamPurchasingServerFacet> .CallSync <SteamTransactionEntity>(
                nameof(SteamPurchasingServerFacet.FinalizeTransaction),
                transaction.orderId,
                true
                );

            Http.AssertSent(request =>
                            request.Url ==
                            "http://api.steam.com/ISteamMicroTxnSandbox/FinalizeTxn/v2/"
                            );
        }
示例#2
0
        public void ItRejectsLoginWithInvalidToken()
        {
            Env.Set("STEAM_API_URL", "https://partner.steam-api.com/");
            Env.Set("STEAM_PUBLISHER_KEY", "some-publisher-key");
            Env.Set("STEAM_APP_ID", "480");

            Http.Fake(Http.Response(new JsonObject {
                ["response"] = new JsonObject {
                    ["error"] = new JsonObject {
                        ["errorcode"] = 3,
                        ["errordesc"] = "Invalid parameter"
                    }
                }
            }));

            Assert.Catch <AuthException>(() => {
                OnFacet <SteamLoginFacet> .CallSync(
                    nameof(SteamLoginFacet.Login),
                    "some-invalid-session-token"
                    );
            }, "Invalid session token.");

            Http.AssertSent(request =>
                            request.Url == "https://partner.steam-api.com/" +
                            "ISteamUserAuth/AuthenticateUserTicket/v1/?" +
                            "key=some-publisher-key&" +
                            "appid=480&" +
                            "ticket=some-invalid-session-token"
                            );
        }
示例#3
0
        public void ItUsesSandboxDuringInitiation()
        {
            Env.Set("STEAM_USE_MICROTRANSACTION_SANDBOX", true);

            var transaction = new SteamTransactionEntity {
                playerSteamId = 123456789L
            };

            transaction.AddProduct <ExampleVirtualProduct>();

            Http.Fake(Http.Response(new JsonObject {
                ["response"] = new JsonObject {
                    ["result"] = "OK",
                    ["params"] = new JsonObject {
                        ["orderid"] = transaction.orderId,
                        ["transid"] = "11122233"
                    }
                }
            }, 200));

            OnFacet <SteamPurchasingServerFacet> .CallSync(
                nameof(SteamPurchasingServerFacet.InitiateTransaction),
                transaction
                );

            Http.AssertSent(request =>
                            request.Url ==
                            "http://api.steam.com/ISteamMicroTxnSandbox/InitTxn/v3/"
                            );
        }
        public void EmailCanBeTaken()
        {
            var player = new PlayerEntity {
                email    = "*****@*****.**",
                password = "******"
            };

            player.Save();

            var response = OnFacet <EmailRegisterFacet> .CallSync <EmailRegisterResponse>(
                nameof(EmailRegisterFacet.Register),
                "*****@*****.**",
                "password"
                );

            Assert.AreEqual(EmailRegisterResponse.EmailTaken, response);

            Assert.AreEqual(
                1,
                DB.TakeAll <PlayerEntity>().Get().Count
                );
            player.Refresh();
            Assert.AreEqual("*****@*****.**", player.email);
            Assert.AreEqual("secret", player.password);
        }
示例#5
0
        public void LoginUpdatesTimestamp()
        {
            var player = new PlayerEntity {
                steamId = "123456789"
            };

            player.Save();

            Http.Fake(Http.Response(new JsonObject {
                ["response"] = new JsonObject {
                    ["params"] = new JsonObject {
                        ["result"]          = "OK",
                        ["steamid"]         = "123456789",
                        ["ownersteamid"]    = "123456789",
                        ["vacbanned"]       = false,
                        ["publisherbanned"] = false
                    }
                }
            }));

            OnFacet <SteamLoginFacet> .CallSync(
                nameof(SteamLoginFacet.Login),
                "valid-session-token"
                );

            var timeBefore = player.lastLoginAt;

            player.Refresh();
            var timeNow = player.lastLoginAt;

            Assert.AreNotEqual(timeBefore, timeNow);
        }
        public void ItLoadsNull()
        {
            var returned = OnFacet <AuthenticationFacet> .CallSync <PlayerEntity>(
                nameof(AuthenticationFacet.GetPlayer)
                );

            Assert.IsNull(returned);
        }
示例#7
0
        public void ItRunsFunctions()
        {
            int result = OnFacet <SomeFacet> .CallSync <int>(
                nameof(SomeFacet.SquaringFunction),
                5
                );

            Assert.AreEqual(25, result);
        }
        public void YouCanLogOutWhileNotLoggedIn()
        {
            var response = OnFacet <EmailLoginFacet> .CallSync <bool>(
                nameof(EmailLoginFacet.Logout)
                );

            Assert.IsFalse(response);
            Assert.IsFalse(Auth.Check());
        }
示例#9
0
        public void ItChecksPublicMethods()
        {
            var e = Assert.Catch <MethodSearchException>(() => {
                OnFacet <SomeFacet> .CallSync(
                    "PrivateProcedure"
                    );
            });

            StringAssert.Contains("has to be public in order to be called", e.ToString());
        }
示例#10
0
        public void ItChecksMethodExistence()
        {
            var e = Assert.Catch <MethodSearchException>(() => {
                OnFacet <SomeFacet> .CallSync(
                    "NonExistingMethod"
                    );
            });

            StringAssert.Contains("doesn't have public method called", e.ToString());
        }
示例#11
0
        public void ItChecksAmbiguousMethods()
        {
            var e = Assert.Catch <MethodSearchException>(() => {
                OnFacet <SomeFacet> .CallSync(
                    nameof(SomeFacet.AmbiguousMethod),
                    false
                    );
            });

            StringAssert.Contains("has multiple methods called", e.ToString());
        }
示例#12
0
        public void UnknownCredentialsGetRejected()
        {
            var response = OnFacet <EmailLoginFacet> .CallSync <bool>(
                nameof(EmailLoginFacet.Login),
                "*****@*****.**",
                "secret"
                );

            Assert.IsFalse(response);
            Assert.IsFalse(Auth.Check());
        }
示例#13
0
        public void ItCanCallFacetsFromTestMethod()
        {
            ExampleTestingFacet.addNumbersWasCalled = false;

            var result = OnFacet <ExampleTestingFacet> .CallSync <int>(
                nameof(ExampleTestingFacet.AddNumbers),
                4, 7
                );

            Assert.AreEqual(11, result);
            Assert.IsTrue(ExampleTestingFacet.addNumbersWasCalled);
        }
        public void PasswordCannotBeWeak()
        {
            var response = OnFacet <EmailRegisterFacet> .CallSync <EmailRegisterResponse>(
                nameof(EmailRegisterFacet.Register),
                "*****@*****.**",
                ""
                );

            Assert.AreEqual(EmailRegisterResponse.WeakPassword, response);

            var player = DB.First <PlayerEntity>();

            Assert.IsNull(player);
        }
示例#15
0
        public void ItRunsMyProcedure()
        {
            SomeFacet.flag = false;

            Assert.IsNull(SessionId);

            OnFacet <SomeFacet> .CallSync(
                nameof(SomeFacet.MyProcedure)
                );

            Assert.IsNotNull(SessionId);

            Assert.IsTrue(SomeFacet.flag);
        }
        public void InvalidEmailIsRejected()
        {
            var response = OnFacet <EmailRegisterFacet> .CallSync <EmailRegisterResponse>(
                nameof(EmailRegisterFacet.Register),
                "john_doe.com",
                "password"
                );

            Assert.AreEqual(EmailRegisterResponse.InvalidEmail, response);

            var player = DB.First <PlayerEntity>();

            Assert.IsNull(player);
        }
示例#17
0
        public void FinalizingTransactionThatDoesNotExist()
        {
            Http.Fake();

            Assert.Throws <SteamPurchasingServerFacet.SteamMicrotransactionException>(() => {
                OnFacet <SteamPurchasingServerFacet> .CallSync <SteamTransactionEntity>(
                    nameof(SteamPurchasingServerFacet.FinalizeTransaction),
                    123456789L,
                    true
                    );
            }, "No initiated transaction with order id 123456789 was found.");

            Http.AssertNothingSent();
        }
        public void PlayerCanRegister()
        {
            var response = OnFacet <EmailRegisterFacet> .CallSync <EmailRegisterResponse>(
                nameof(EmailRegisterFacet.Register),
                "*****@*****.**",
                "password"
                );

            Assert.AreEqual(EmailRegisterResponse.Ok, response);

            var player = DB.First <PlayerEntity>();

            Assert.IsNotNull(player);
            Assert.AreEqual("*****@*****.**", player.email);
            Assert.IsTrue(Hash.Check("password", player.password));
        }
示例#19
0
        public void InvalidPasswordGetsRejected()
        {
            new PlayerEntity {
                email    = "*****@*****.**",
                password = Hash.Make("different-secret")
            }.Save();

            var response = OnFacet <EmailLoginFacet> .CallSync <bool>(
                nameof(EmailLoginFacet.Login),
                "*****@*****.**",
                "secret"
                );

            Assert.IsFalse(response);
            Assert.IsFalse(Auth.Check());
        }
示例#20
0
        public void YouCanLogOut()
        {
            var player = new PlayerEntity {
                steamId = "123456789"
            };

            player.Save();

            ActingAs(player);

            var response = OnFacet <SteamLoginFacet> .CallSync <bool>(
                nameof(SteamLoginFacet.Logout)
                );

            Assert.IsTrue(response);
            Assert.IsFalse(Auth.Check());
        }
示例#21
0
        public void InitiatingTransactionWithNoProducts()
        {
            var transaction = new SteamTransactionEntity {
                playerSteamId = 123456789L
            };

            Http.Fake();

            Assert.Throws <ArgumentException>(() => {
                OnFacet <SteamPurchasingServerFacet> .CallSync(
                    nameof(SteamPurchasingServerFacet.InitiateTransaction),
                    transaction
                    );
            }, "Given transaction has no items inside of it.");

            Http.AssertNothingSent();
        }
示例#22
0
        public void ItRunsMyParametrizedProcedure()
        {
            SomeFacet.flag = false;

            OnFacet <SomeFacet> .CallSync(
                nameof(SomeFacet.MyParametrizedProcedure),
                true
                );

            Assert.IsTrue(SomeFacet.flag);

            OnFacet <SomeFacet> .CallSync(
                nameof(SomeFacet.MyParametrizedProcedure),
                false
                );

            Assert.IsFalse(SomeFacet.flag);
        }
示例#23
0
        public void YouCanLogOut()
        {
            var player = new PlayerEntity {
                email    = "*****@*****.**",
                password = Hash.Make("secret")
            };

            player.Save();

            ActingAs(player);

            var response = OnFacet <EmailLoginFacet> .CallSync <bool>(
                nameof(EmailLoginFacet.Logout)
                );

            Assert.IsTrue(response);
            Assert.IsFalse(Auth.Check());
        }
        public void ItStoresLogout()
        {
            var player = new PlayerEntity {
                name = "John"
            };

            player.Save();

            Session.Set(AuthenticationManager.SessionKey, player.EntityId);

            OnFacet <AuthenticationFacet> .CallSync(
                nameof(AuthenticationFacet.Logout)
                );

            Assert.IsNull(
                Session.Get <string>(AuthenticationManager.SessionKey)
                );
        }
示例#25
0
        public void ItLogsPlayerIn()
        {
            var player = new PlayerEntity {
                steamId = "123456789"
            };

            player.Save();

            Env.Set("STEAM_API_URL", "https://partner.steam-api.com/");
            Env.Set("STEAM_PUBLISHER_KEY", "some-publisher-key");
            Env.Set("STEAM_APP_ID", "480");

            Http.Fake(Http.Response(new JsonObject {
                ["response"] = new JsonObject {
                    ["params"] = new JsonObject {
                        ["result"]          = "OK",
                        ["steamid"]         = "123456789",
                        ["ownersteamid"]    = "123456789",
                        ["vacbanned"]       = false,
                        ["publisherbanned"] = false
                    }
                }
            }));

            OnFacet <SteamLoginFacet> .CallSync(
                nameof(SteamLoginFacet.Login),
                "valid-session-token"
                );

            Http.AssertSent(request =>
                            request.Url == "https://partner.steam-api.com/" +
                            "ISteamUserAuth/AuthenticateUserTicket/v1/?" +
                            "key=some-publisher-key&" +
                            "appid=480&" +
                            "ticket=valid-session-token"
                            );

            Assert.IsTrue(Auth.Check());
            Assert.AreEqual(
                player.EntityId,
                Auth.Id()
                );
        }
示例#26
0
        public void FinalizingTransactionThatIsNotInitiated()
        {
            var transaction = new SteamTransactionEntity {
                playerSteamId = 123456789L,
                state         = SteamTransactionEntity.BeingPreparedState
            };

            Http.Fake();

            Assert.Throws <SteamPurchasingServerFacet.SteamMicrotransactionException>(() => {
                OnFacet <SteamPurchasingServerFacet> .CallSync <SteamTransactionEntity>(
                    nameof(SteamPurchasingServerFacet.FinalizeTransaction),
                    123456789L,
                    true
                    );
            }, "No initiated transaction with order id 123456789 was found.");

            Http.AssertNothingSent();
        }
示例#27
0
        public void RegisteredAnyCaseEmailCanLogInWhenExact()
        {
            new PlayerEntity {
                email    = "*****@*****.**",
                password = Hash.Make("secret")
            }.Save();

            var response = OnFacet <EmailLoginFacet> .CallSync <bool>(
                nameof(EmailLoginFacet.Login),
                "*****@*****.**",
                "secret"
                );

            Assert.IsTrue(response);
            Assert.IsTrue(Auth.Check());
            Assert.AreEqual(
                "*****@*****.**",
                Auth.GetPlayer <PlayerEntity>().email
                );
        }
示例#28
0
        public void EmailCanBeAnyCaseAndNonTrimmed()
        {
            new PlayerEntity {
                email    = "*****@*****.**",
                password = Hash.Make("secret")
            }.Save();

            var response = OnFacet <EmailLoginFacet> .CallSync <bool>(
                nameof(EmailLoginFacet.Login),
                "  [email protected]   ",
                "secret"
                );

            Assert.IsTrue(response);
            Assert.IsTrue(Auth.Check());
            Assert.AreEqual(
                "*****@*****.**",
                Auth.GetPlayer <PlayerEntity>().email
                );
        }
示例#29
0
        public void ProperCredentialsLogYouIn()
        {
            new PlayerEntity {
                email    = "*****@*****.**",
                password = Hash.Make("secret")
            }.Save();

            var response = OnFacet <EmailLoginFacet> .CallSync <bool>(
                nameof(EmailLoginFacet.Login),
                "*****@*****.**",
                "secret"
                );

            Assert.IsTrue(response);
            Assert.IsTrue(Auth.Check());
            Assert.AreEqual(
                "*****@*****.**",
                Auth.GetPlayer <PlayerEntity>().email
                );
        }
        public void ItStoresAuthenticatedPlayer()
        {
            var player = new PlayerEntity {
                name = "John"
            };

            player.Save();

            Assert.IsNull(
                Session.Get <string>(AuthenticationManager.SessionKey)
                );

            OnFacet <AuthenticationFacet> .CallSync(
                nameof(AuthenticationFacet.Login), "John"
                );

            Assert.AreEqual(
                player.EntityId,
                Session.Get <string>(AuthenticationManager.SessionKey)
                );
        }