public void UpdateUsergeneratedSystemKey_IfNoPermissionIsAssigned_InvalidOperationExceptionWillBeThrown()
        {
            UserValidationEssentials  essentials = AccessControlUtility.RegisterAndLogin("user", "*****@*****.**", "123", _applicationContext);
            SecurityKeyPairController securityKeyPairController =
                _applicationContext["SecurityKeyPairController"] as SecurityKeyPairController;
            IPermissionRepository permissionRepository   = _applicationContext["PermissionRespository"] as IPermissionRepository;
            IList <Permission>    permissions            = permissionRepository.GetAllPermissions();
            List <string>         securityKeyPermissions = new List <string>();

            for (int i = 0; i < permissions.Count; i++)
            {
                securityKeyPermissions.Add(permissions[i].PermissionId);
            }
            securityKeyPairController.Request = new HttpRequestMessage(HttpMethod.Post, "");
            securityKeyPairController.Request.Headers.Add("Auth", essentials.ApiKey);
            CreateUserGeneratedSecurityKeyPair command         = new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions, "", "", "", false, false, false, "#1");
            IHttpActionResult httpActionResult                 = securityKeyPairController.CreateSecurityKey(command);
            OkNegotiatedContentResult <SecurityKeyPair> result = (OkNegotiatedContentResult <SecurityKeyPair>)httpActionResult;

            Assert.IsNotNullOrEmpty(result.Content.ApiKey);
            Assert.IsNotNullOrEmpty(result.Content.SecretKey);

            httpActionResult = securityKeyPairController.GetUserSecurityKeys();
            OkNegotiatedContentResult <object> result1 = (OkNegotiatedContentResult <object>)httpActionResult;
            List <object> objectPairs = result1.Content as List <object>;

            Assert.IsNotNull(objectPairs);
            List <SecurityKeyPairList> pairs = new List <SecurityKeyPairList>();

            foreach (object objectPair in objectPairs)
            {
                pairs.Add(objectPair as SecurityKeyPairList);
            }
            Assert.AreEqual(pairs.Count, 1);
            Assert.AreEqual(pairs[0].KeyDescription, "#1");
            Assert.IsNull(pairs[0].ExpirationDate);

            httpActionResult = securityKeyPairController.GetSecurityKeyDetail("#1");
            OkNegotiatedContentResult <SecurityKeyRepresentation> securityKey = (OkNegotiatedContentResult <SecurityKeyRepresentation>)httpActionResult;

            Assert.AreEqual(securityKey.Content.KeyDescritpion, "#1");
            Assert.AreEqual(securityKey.Content.EnableEndDate, false);
            Assert.AreEqual(securityKey.Content.EnableExpirationDate, false);
            Assert.AreEqual(securityKey.Content.EnableStartDate, false);

            List <SecurityKeyPermissionsRepresentation> permissionsRepresentations = new List <SecurityKeyPermissionsRepresentation>();

            for (int i = 0; i < securityKeyPermissions.Count; i++)
            {
                permissionsRepresentations.Add(new SecurityKeyPermissionsRepresentation(false, new Permission(securityKeyPermissions[i], "")));
            }
            UpdateUserGeneratedSecurityKeyPair updateKeyPair =
                new UpdateUserGeneratedSecurityKeyPair(securityKey.Content.ApiKey, "#2", true, false, false, "",
                                                       DateTime.Today.AddDays(-2).ToString(), permissionsRepresentations.ToArray(), "");

            httpActionResult = securityKeyPairController.UpdateSecurityKey(updateKeyPair);
            BadRequestErrorMessageResult errorMessage = (BadRequestErrorMessageResult)httpActionResult;

            Assert.AreEqual(errorMessage.Message, "Please assign atleast one permission.");
        }
        public void ApplyForTier3_IfCallIsValid_Tier3StatusWillBeChangedToPreVerified()
        {
            UserValidationEssentials essentials     = AccessControlUtility.RegisterAndLogin("user", "*****@*****.**", "123", _applicationContext);
            TierController           tierController = _applicationContext["TierController"] as TierController;

            tierController.Request = new HttpRequestMessage(HttpMethod.Post, "");
            tierController.Request.Headers.Add("Auth", essentials.ApiKey);
            tierController.GetVerifyForTier1(new Tier1Param("User", DateTime.Now.AddDays(-10).ToShortDateString(), "656667"));
            tierController.GetVerifyForTier2(new Tier2Param("asd", "", "", "punjab", "Isb", "123"));
            var content = new MultipartFormDataContent();

            content.Add(new StreamContent(new FileStream(@"C:\Logs\Logs.txt", FileMode.Open)));
            tierController.Request.Content = content;
            tierController.GetVerifyForTier3(new Tier3Param("asd", "123", "bill", "logs.txt"));
            ManualResetEvent resetEvent = new ManualResetEvent(false);

            resetEvent.WaitOne(15000);
            IHttpActionResult httpActionResult = tierController.GetTierStatuses();
            OkNegotiatedContentResult <UserTierStatusRepresentation[]> statuses = (OkNegotiatedContentResult <UserTierStatusRepresentation[]>)httpActionResult;

            Assert.AreEqual(statuses.Content.Length, 5);
            Assert.AreEqual(statuses.Content[0].Status, Status.Verified.ToString());
            Assert.AreEqual(statuses.Content[1].Status, Status.Preverified.ToString());
            Assert.AreEqual(statuses.Content[2].Status, Status.Preverified.ToString());
            Assert.AreEqual(statuses.Content[3].Status, Status.Preverified.ToString());

            httpActionResult = tierController.GetTier3Details();
            OkNegotiatedContentResult <Tier3Details> detials = (OkNegotiatedContentResult <Tier3Details>)httpActionResult;

            Assert.AreEqual(detials.Content.Nin, "123");
            Assert.AreEqual(detials.Content.Ssn, "asd");
        }
        public void ApplyForTier2_IfCallIsValid_Tier2StatusWillBeChangedToPreVerified()
        {
            UserValidationEssentials essentials     = AccessControlUtility.RegisterAndLogin("user", "*****@*****.**", "123", _applicationContext);
            TierController           tierController = _applicationContext["TierController"] as TierController;

            tierController.Request = new HttpRequestMessage(HttpMethod.Post, "");
            tierController.Request.Headers.Add("Auth", essentials.ApiKey);
            tierController.GetVerifyForTier1(new Tier1Param("User", DateTime.Now.AddDays(-10).ToShortDateString(), "656667"));
            tierController.GetVerifyForTier2(new Tier2Param("asd", "", "", "punjab", "Isb", "123"));

            IHttpActionResult httpActionResult = tierController.GetTierStatuses();
            OkNegotiatedContentResult <UserTierStatusRepresentation[]> statuses = (OkNegotiatedContentResult <UserTierStatusRepresentation[]>)httpActionResult;

            Assert.AreEqual(statuses.Content.Length, 5);
            Assert.AreEqual(statuses.Content[0].Status, Status.Verified.ToString());
            Assert.AreEqual(statuses.Content[1].Status, Status.Preverified.ToString());
            Assert.AreEqual(statuses.Content[2].Status, Status.Preverified.ToString());

            httpActionResult = tierController.GetTier2Details();
            OkNegotiatedContentResult <Tier2Details> detials = (OkNegotiatedContentResult <Tier2Details>)httpActionResult;

            Assert.AreEqual(detials.Content.Country, "Pakistan");
            Assert.AreEqual(detials.Content.AddressLine1, "asd");
            Assert.AreEqual(detials.Content.State, "punjab");
            Assert.AreEqual(detials.Content.City, "Isb");
            Assert.AreEqual(detials.Content.ZipCode, "123");
        }
        public void VerifyTierLevelTest_TestsIfTheTierLevelIsVerifiedAsExpected_QueriesDatabaseToConfirm()
        {
            UserValidationEssentials essentials     = AccessControlUtility.RegisterAndLogin("user", "*****@*****.**", "123", _applicationContext);
            TierController           tierController = _applicationContext["TierController"] as TierController;

            Assert.IsNotNull(tierController);

            tierController.Request = new HttpRequestMessage(HttpMethod.Post, "");
            tierController.Request.Headers.Add("Auth", essentials.ApiKey);

            tierController.GetVerifyForTier1(new Tier1Param("User", DateTime.Now.AddDays(-10).ToShortDateString(), "656667"));
            // Tier 2 will not be considered for verification because Tier 1 is not yet verified
            tierController.GetVerifyForTier2(new Tier2Param("asd", "", "", "punjab", "Isb", "123"));

            IHttpActionResult httpActionResult = tierController.GetTierStatuses();
            OkNegotiatedContentResult <UserTierStatusRepresentation[]> statuses = (OkNegotiatedContentResult <UserTierStatusRepresentation[]>)httpActionResult;

            Assert.AreEqual(statuses.Content.Length, 5);
            Assert.AreEqual(statuses.Content[0].Status, Status.Verified.ToString());
            Assert.AreEqual(statuses.Content[1].Status, Status.Preverified.ToString());
            Assert.AreEqual(statuses.Content[2].Status, Status.NonVerified.ToString());

            IHttpActionResult verifyTierLevelResult = tierController.VerifyTierLevel(new VerifyTierLevelParams("Tier 1", essentials.ApiKey));
            OkNegotiatedContentResult <VerifyTierLevelResponse> verificationResponse = (OkNegotiatedContentResult <VerifyTierLevelResponse>)verifyTierLevelResult;

            Assert.IsTrue(verificationResponse.Content.VerificationSuccessful);

            httpActionResult = tierController.GetTierStatuses();
            statuses         = (OkNegotiatedContentResult <UserTierStatusRepresentation[]>)httpActionResult;
            Assert.AreEqual(statuses.Content.Length, 5);
            Assert.AreEqual(statuses.Content[0].Status, Status.Verified.ToString());
            Assert.AreEqual(statuses.Content[1].Status, Status.Verified.ToString());
            Assert.AreEqual(statuses.Content[2].Status, Status.NonVerified.ToString());

            // Tier 2 will now be verified as Tier 1 is already verified
            tierController.GetVerifyForTier2(new Tier2Param("asd", "", "", "punjab", "Isb", "123"));
            httpActionResult = tierController.GetTierStatuses();
            statuses         = (OkNegotiatedContentResult <UserTierStatusRepresentation[]>)httpActionResult;
            Assert.AreEqual(statuses.Content.Length, 5);
            Assert.AreEqual(statuses.Content[0].Status, Status.Verified.ToString());
            Assert.AreEqual(statuses.Content[1].Status, Status.Verified.ToString());
            Assert.AreEqual(statuses.Content[2].Status, Status.Preverified.ToString());

            verifyTierLevelResult = tierController.VerifyTierLevel(new VerifyTierLevelParams("Tier 2", essentials.ApiKey));
            verificationResponse  = (OkNegotiatedContentResult <VerifyTierLevelResponse>)verifyTierLevelResult;
            Assert.IsTrue(verificationResponse.Content.VerificationSuccessful);

            httpActionResult = tierController.GetTierStatuses();
            statuses         = (OkNegotiatedContentResult <UserTierStatusRepresentation[]>)httpActionResult;
            Assert.AreEqual(statuses.Content.Length, 5);
            Assert.AreEqual(statuses.Content[0].Status, Status.Verified.ToString());
            Assert.AreEqual(statuses.Content[1].Status, Status.Verified.ToString());
            Assert.AreEqual(statuses.Content[2].Status, Status.Verified.ToString());
        }
        public void GetTier3Detials_IfTier3IsNotVerified_InvalidOperationExceptionShouldBeThrown()
        {
            UserValidationEssentials essentials     = AccessControlUtility.RegisterAndLogin("user", "*****@*****.**", "123", _applicationContext);
            TierController           tierController = _applicationContext["TierController"] as TierController;

            tierController.Request = new HttpRequestMessage(HttpMethod.Post, "");
            tierController.Request.Headers.Add("Auth", essentials.ApiKey);
            IHttpActionResult            httpActionResult = tierController.GetTier3Details();
            BadRequestErrorMessageResult result           = httpActionResult as BadRequestErrorMessageResult;

            Assert.AreEqual(result.Message, "Tier 3 details are not submitted yet.");
        }
        public void CreateUsergeneratedSystemKey_ProvideAllParameters_TheKeysShouldBeReturned()
        {
            UserValidationEssentials  essentials = AccessControlUtility.RegisterAndLogin("user", "*****@*****.**", "123", _applicationContext);
            SecurityKeyPairController securityKeyPairController =
                _applicationContext["SecurityKeyPairController"] as SecurityKeyPairController;
            IPermissionRepository permissionRepository   = _applicationContext["PermissionRespository"] as IPermissionRepository;
            IList <Permission>    permissions            = permissionRepository.GetAllPermissions();
            List <string>         securityKeyPermissions = new List <string>();

            for (int i = 0; i < permissions.Count; i++)
            {
                securityKeyPermissions.Add(permissions[i].PermissionId);
            }
            securityKeyPairController.Request = new HttpRequestMessage(HttpMethod.Post, "");
            securityKeyPairController.Request.Headers.Add("Auth", essentials.ApiKey);
            CreateUserGeneratedSecurityKeyPair command         = new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions, "", "", "", false, false, false, "#1");
            IHttpActionResult httpActionResult                 = securityKeyPairController.CreateSecurityKey(command);
            OkNegotiatedContentResult <SecurityKeyPair> result = (OkNegotiatedContentResult <SecurityKeyPair>)httpActionResult;

            Assert.IsNotNullOrEmpty(result.Content.ApiKey);
            Assert.IsNotNullOrEmpty(result.Content.SecretKey);

            CreateUserGeneratedSecurityKeyPair command2 = new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions, "", "", "", false, false, false, "#2");

            httpActionResult = securityKeyPairController.CreateSecurityKey(command2);
            result           = (OkNegotiatedContentResult <SecurityKeyPair>)httpActionResult;
            Assert.IsNotNullOrEmpty(result.Content.ApiKey);
            Assert.IsNotNullOrEmpty(result.Content.SecretKey);

            httpActionResult = securityKeyPairController.GetUserSecurityKeys();
            OkNegotiatedContentResult <object> result1 = (OkNegotiatedContentResult <object>)httpActionResult;
            List <object> objectPairs        = result1.Content as List <object>;
            List <SecurityKeyPairList> pairs = new List <SecurityKeyPairList>();

            foreach (object objectPair in objectPairs)
            {
                pairs.Add(objectPair as SecurityKeyPairList);
            }

            Assert.AreEqual(pairs.Count, 2);
            Assert.AreEqual(pairs[1].KeyDescription, "#1");
            Assert.IsNull(pairs[1].ExpirationDate);

            httpActionResult = securityKeyPairController.GetSecurityKeyDetail("#1");
            OkNegotiatedContentResult <SecurityKeyRepresentation> securityKey = (OkNegotiatedContentResult <SecurityKeyRepresentation>)httpActionResult;

            Assert.AreEqual(securityKey.Content.KeyDescritpion, "#1");
            Assert.AreEqual(securityKey.Content.EnableEndDate, false);
            Assert.AreEqual(securityKey.Content.EnableExpirationDate, false);
            Assert.AreEqual(securityKey.Content.EnableStartDate, false);

            Assert.AreEqual(pairs[0].KeyDescription, "#2");
            Assert.IsNull(pairs[0].ExpirationDate);

            httpActionResult = securityKeyPairController.GetSecurityKeyDetail("#2");
            securityKey      = (OkNegotiatedContentResult <SecurityKeyRepresentation>)httpActionResult;
            Assert.AreEqual(securityKey.Content.KeyDescritpion, "#2");
            Assert.AreEqual(securityKey.Content.EnableEndDate, false);
            Assert.AreEqual(securityKey.Content.EnableExpirationDate, false);
            Assert.AreEqual(securityKey.Content.EnableStartDate, false);
        }
        public void UpdateUsergeneratedSystemKey_ProvideAllParameters_TheKeysDetailsShouldGetUpdated()
        {
            UserValidationEssentials  essentials = AccessControlUtility.RegisterAndLogin("user", "*****@*****.**", "123", _applicationContext);
            SecurityKeyPairController securityKeyPairController =
                _applicationContext["SecurityKeyPairController"] as SecurityKeyPairController;
            IPermissionRepository permissionRepository   = _applicationContext["PermissionRespository"] as IPermissionRepository;
            IList <Permission>    permissions            = permissionRepository.GetAllPermissions();
            List <string>         securityKeyPermissions = new List <string>();

            for (int i = 0; i < permissions.Count; i++)
            {
                securityKeyPermissions.Add(permissions[i].PermissionId);
            }
            securityKeyPairController.Request = new HttpRequestMessage(HttpMethod.Post, "");
            securityKeyPairController.Request.Headers.Add("Auth", essentials.ApiKey);
            CreateUserGeneratedSecurityKeyPair command         = new CreateUserGeneratedSecurityKeyPair(securityKeyPermissions, "", "", "", false, false, false, "#1");
            IHttpActionResult httpActionResult                 = securityKeyPairController.CreateSecurityKey(command);
            OkNegotiatedContentResult <SecurityKeyPair> result = (OkNegotiatedContentResult <SecurityKeyPair>)httpActionResult;

            Assert.IsNotNullOrEmpty(result.Content.ApiKey);
            Assert.IsNotNullOrEmpty(result.Content.SecretKey);

            httpActionResult = securityKeyPairController.GetUserSecurityKeys();
            OkNegotiatedContentResult <object> result1 = (OkNegotiatedContentResult <object>)httpActionResult;
            List <object> objectPairs = result1.Content as List <object>;

            Assert.IsNotNull(objectPairs);
            List <SecurityKeyPairList> pairs = new List <SecurityKeyPairList>();

            foreach (object objectPair in objectPairs)
            {
                pairs.Add(objectPair as SecurityKeyPairList);
            }
            Assert.AreEqual(pairs.Count, 1);
            Assert.AreEqual(pairs[0].KeyDescription, "#1");
            Assert.IsNull(pairs[0].ExpirationDate);

            httpActionResult = securityKeyPairController.GetSecurityKeyDetail("#1");
            OkNegotiatedContentResult <SecurityKeyRepresentation> securityKey = (OkNegotiatedContentResult <SecurityKeyRepresentation>)httpActionResult;

            Assert.AreEqual(securityKey.Content.KeyDescritpion, "#1");
            Assert.AreEqual(securityKey.Content.EnableEndDate, false);
            Assert.AreEqual(securityKey.Content.EnableExpirationDate, false);
            Assert.AreEqual(securityKey.Content.EnableStartDate, false);

            List <SecurityKeyPermissionsRepresentation> permissionsRepresentations = new List <SecurityKeyPermissionsRepresentation>();

            for (int i = 0; i < securityKeyPermissions.Count; i++)
            {
                if (securityKeyPermissions[i] == PermissionsConstant.Cancel_Order)
                {
                    permissionsRepresentations.Add(new SecurityKeyPermissionsRepresentation(false, new Permission(securityKeyPermissions[i], "Cancel Order")));
                }
                else if (securityKeyPermissions[i] == PermissionsConstant.Query_Open_Orders)
                {
                    permissionsRepresentations.Add(new SecurityKeyPermissionsRepresentation(false, new Permission(securityKeyPermissions[i], "Query Open Orders")));
                }
                else if (securityKeyPermissions[i] == PermissionsConstant.Place_Order)
                {
                    permissionsRepresentations.Add(new SecurityKeyPermissionsRepresentation(false, new Permission(securityKeyPermissions[i], "Place Order")));
                }
                else if (securityKeyPermissions[i] == PermissionsConstant.Withdraw_Funds)
                {
                    permissionsRepresentations.Add(new SecurityKeyPermissionsRepresentation(false, new Permission(securityKeyPermissions[i], "Withdraw Funds")));
                }
                else
                {
                    permissionsRepresentations.Add(new SecurityKeyPermissionsRepresentation(true, new Permission(securityKeyPermissions[i], securityKeyPermissions[i])));
                }
            }
            UpdateUserGeneratedSecurityKeyPair updateKeyPair =
                new UpdateUserGeneratedSecurityKeyPair(securityKey.Content.ApiKey, "#2", true, false, false, "",
                                                       DateTime.Today.AddDays(-2).ToString(), permissionsRepresentations.ToArray(), "");

            httpActionResult = securityKeyPairController.UpdateSecurityKey(updateKeyPair);

            httpActionResult = securityKeyPairController.GetSecurityKeyDetail("#2");
            securityKey      = (OkNegotiatedContentResult <SecurityKeyRepresentation>)httpActionResult;
            Assert.AreEqual(securityKey.Content.KeyDescritpion, "#2");
            Assert.AreEqual(securityKey.Content.EnableEndDate, false);
            Assert.AreEqual(securityKey.Content.EnableExpirationDate, false);
            Assert.AreEqual(securityKey.Content.EnableStartDate, true);
            ValidatePermissions(securityKey.Content.SecurityKeyPermissions);
        }