public async Task PostInvalidInstanceTradedAsset(AlgoInstanceType algoInstanceType) { WalletDTO walletDTO = null; if (algoInstanceType == AlgoInstanceType.Live) { walletDTO = await GetExistingWallet(); } // Create algo var algoData = await CreateAlgo(); // Build days offset DaysOffsetDTO daysOffsetDTO = BuildDaysOffsetByInstanceType(algoInstanceType); // Build InstanceParameters InstanceParameters instanceParameters = InstanceConfig.InvalidInstanceTradedAsset; // Build instance request payload var instanceForAlgo = InstanceDataBuilder.BuildInstanceData(algoData, walletDTO, algoInstanceType, instanceParameters, daysOffsetDTO); var url = algoInstanceType == AlgoInstanceType.Live ? ApiPaths.ALGO_STORE_SAVE_ALGO_INSTANCE : ApiPaths.ALGO_STORE_FAKE_TRADING_INSTANCE_DATA; var postInstanceDataResponse = await Consumer.ExecuteRequest(url, Helpers.EmptyDictionary, JsonUtils.SerializeObject(instanceForAlgo), Method.POST); AlgoErrorDTO postInstanceDataResponseDTO = JsonUtils.DeserializeJson <AlgoErrorDTO>(postInstanceDataResponse.ResponseJson); Assert.That(postInstanceDataResponse.Status, Is.EqualTo(HttpStatusCode.BadRequest), "should be bad response erorr code"); Assert.That(postInstanceDataResponseDTO.ErrorMessage, Does.Contain("ValidationError Message:Asset <USD> is not valid for asset pair <BTCEUR>"), "we should receive erorr for the invalid traded asset"); }
public async Task PostInvalidInstanceAssetPair(AlgoInstanceType algoInstanceType) { WalletDTO walletDTO = null; if (algoInstanceType == AlgoInstanceType.Live) { walletDTO = await GetExistingWallet(); } // Create algo var algoData = await CreateAlgo(); // Build days offset DaysOffsetDTO daysOffsetDTO = BuildDaysOffsetByInstanceType(algoInstanceType); // Build InstanceParameters InstanceParameters instanceParameters = InstanceConfig.InvalidInstanceAssetPair; // Build instance request payload var instanceForAlgo = InstanceDataBuilder.BuildInstanceData(algoData, walletDTO, algoInstanceType, instanceParameters, daysOffsetDTO); var url = algoInstanceType == AlgoInstanceType.Live ? ApiPaths.ALGO_STORE_SAVE_ALGO_INSTANCE : ApiPaths.ALGO_STORE_FAKE_TRADING_INSTANCE_DATA; var postInstanceDataResponse = await Consumer.ExecuteRequest(url, Helpers.EmptyDictionary, JsonUtils.SerializeObject(instanceForAlgo), Method.POST); AlgoErrorDTO postInstanceDataResponseDTO = JsonUtils.DeserializeJson <AlgoErrorDTO>(postInstanceDataResponse.ResponseJson); Assert.That(postInstanceDataResponse.Status, Is.EqualTo(HttpStatusCode.InternalServerError), "responce should equals internal server erorr"); Assert.That(postInstanceDataResponseDTO.ErrorMessage, Does.Contain("NotFound from asset service calling AssetPairGetWithHttpMessagesAsync"), "we should receive erorr for not found asset pair"); }
public async Task AssertAlgoNotDeleted(Response deleteAlgoRequest, AlgoDataDTO algoData, string errorMessage) { AlgoErrorDTO deleteAlgoResponse = JsonUtils.DeserializeJson <AlgoErrorDTO>(deleteAlgoRequest.ResponseJson); Assert.That(deleteAlgoRequest.Status, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(deleteAlgoResponse.DisplayMessage, Is.EqualTo(errorMessage)); // Assert algo is not deleted from DB Assert.That(await AlgoExists(algoData), Is.True); }
public async Task AssertAlgoDeleted(Response deleteAlgoRequest, AlgoDataDTO algoData) { AlgoErrorDTO deleteAlgoResponse = JsonUtils.DeserializeJson <AlgoErrorDTO>(deleteAlgoRequest.ResponseJson); Assert.That(deleteAlgoRequest.Status, Is.EqualTo(HttpStatusCode.OK)); Assert.That(deleteAlgoResponse, Is.Null); // Assert algo is deleted from DB Assert.That(await AlgoExists(algoData), Is.False); }
public async Task BackTestWithLongFunctionPeriod(AlgoInstanceType algoInstanceType) { WalletDTO walletDTO = null; if (algoInstanceType == AlgoInstanceType.Live) { walletDTO = await GetExistingWallet(); } // Create algo var algoData = await CreateAlgo(); // Build days offset DaysOffsetDTO daysOffsetDTO = BuildDaysOffsetByInstanceType(algoInstanceType); // Set Instance start date to be three years ago and end date to be 10 days ago int start = 365 * -3; int end = -10; daysOffsetDTO.AlgoStartOffset = start; daysOffsetDTO.AlgoEndOffset = end; daysOffsetDTO.SmaShortStartOffset = start; daysOffsetDTO.SmaShortEndOffset = end; daysOffsetDTO.SmaShortStartOffset = start; daysOffsetDTO.SmaLongEndOffset = end; // Build InstanceParameters InstanceParameters instanceParameters = InstanceConfig.ValidMetaData; // Build instance request payload var instanceForAlgo = InstanceDataBuilder.BuildInstanceData(algoData, walletDTO, algoInstanceType, instanceParameters, daysOffsetDTO); // Build save instance url var url = algoInstanceType == AlgoInstanceType.Live ? ApiPaths.ALGO_STORE_SAVE_ALGO_INSTANCE : ApiPaths.ALGO_STORE_FAKE_TRADING_INSTANCE_DATA; var postInstanceDataResponse = await Consumer.ExecuteRequest(url, Helpers.EmptyDictionary, JsonUtils.SerializeObject(instanceForAlgo), Method.POST); AlgoErrorDTO postInstanceDataResponseDTO = JsonUtils.DeserializeJson <AlgoErrorDTO>(postInstanceDataResponse.ResponseJson); // Get instance data from DB ClientInstanceEntity instanceDataFromDB = await ClientInstanceRepository.TryGetAsync(t => t.AlgoId == algoData.Id) as ClientInstanceEntity; Assert.Multiple(() => { Assert.That(postInstanceDataResponse.Status, Is.EqualTo(HttpStatusCode.InternalServerError)); Assert.That(postInstanceDataResponseDTO.ErrorMessage, Does.StartWith("Code:511-InitialWalletBalanceNotCalculated Message:Initial wallet balance could not be calculated. Could not get history price for")); // Verify intance is not created in DB Assert.That(instanceDataFromDB, Is.Null); }); }
public async Task PostInvalidVolume() { UploadStringDTO metadataForUploadedBinary = await UploadStringAlgo(); string algoID = metadataForUploadedBinary.AlgoId; instanceForAlgo = GetPopulatedInstanceDataDTO.returnInstanceDataDTONegativeVolume(algoID); string url = ApiPaths.ALGO_STORE_ALGO_INSTANCE_DATA; var postInstanceDataResponse = await this.Consumer.ExecuteRequest(url, Helpers.EmptyDictionary, JsonUtils.SerializeObject(instanceForAlgo), Method.POST); AlgoErrorDTO postInstanceDataResponseDTO = JsonUtils.DeserializeJson <AlgoErrorDTO>(postInstanceDataResponse.ResponseJson); Assert.That(postInstanceDataResponse.Status, Is.EqualTo(HttpStatusCode.BadRequest), "we should receive bad request response code"); Assert.That(postInstanceDataResponseDTO.ErrorMessage, Does.Contain("Code:1000-ValidationError Message"), "we should receive validation erorr for invalid volume"); }
public async Task PostInvalidInstanceTradedAsset() { UploadStringDTO metadataForUploadedBinary = await UploadStringAlgo(); string algoID = metadataForUploadedBinary.AlgoId; instanceForAlgo = GetPopulatedInstanceDataDTO.returnInstanceDataDTOInvalidTradedAsset(algoID); string url = ApiPaths.ALGO_STORE_ALGO_INSTANCE_DATA; var postInstanceDataResponse = await this.Consumer.ExecuteRequest(url, Helpers.EmptyDictionary, JsonUtils.SerializeObject(instanceForAlgo), Method.POST); AlgoErrorDTO postInstanceDataResponseDTO = JsonUtils.DeserializeJson <AlgoErrorDTO>(postInstanceDataResponse.ResponseJson); Assert.That(postInstanceDataResponse.Status, Is.EqualTo(HttpStatusCode.BadRequest), "should be bad response erorr code"); Assert.That(postInstanceDataResponseDTO.ErrorMessage, Does.Contain("ValidationError Message:Asset <USD> is not valid for asset pair <BTCEUR>"), "we should receive erorr for the invalid traded asset"); }
public async Task PostInvalidInstanceAssetPair() { UploadStringDTO metadataForUploadedBinary = await UploadStringAlgo(); string algoID = metadataForUploadedBinary.AlgoId; instanceForAlgo = GetPopulatedInstanceDataDTO.returnInstanceDataDTOInvalidAssetPair(algoID); string url = ApiPaths.ALGO_STORE_ALGO_INSTANCE_DATA; var postInstanceDataResponse = await this.Consumer.ExecuteRequest(url, Helpers.EmptyDictionary, JsonUtils.SerializeObject(instanceForAlgo), Method.POST); AlgoErrorDTO postInstanceDataResponseDTO = JsonUtils.DeserializeJson <AlgoErrorDTO>(postInstanceDataResponse.ResponseJson); Assert.That(postInstanceDataResponse.Status, Is.EqualTo(HttpStatusCode.InternalServerError), "responce should equals internal server erorr"); Assert.That(postInstanceDataResponseDTO.ErrorMessage, Does.Contain("NotFound from asset service calling AssetPairGetWithHttpMessagesAsync"), "we should receive erorr for not found asset pair"); }
public async Task PostInvalidInstanceTradedAsset(AlgoInstanceType algoInstanceType) { WalletDTO walletDTO = null; if (algoInstanceType == AlgoInstanceType.Live) { walletDTO = await GetExistingWallet(); } // Create algo var algoData = await CreateAlgo(); // Build days offset DaysOffsetDTO daysOffsetDTO = BuildDaysOffsetByInstanceType(algoInstanceType); // Build InstanceParameters InstanceParameters instanceParameters = new InstanceParameters() { AssetPair = "BTCUSD", TradedAsset = "EUR", InstanceTradeVolume = 2, InstanceCandleInterval = CandleTimeInterval.Minute, FunctionCandleInterval = CandleTimeInterval.Day, FunctionCandleOperationMode = CandleOperationMode.CLOSE, FunctionCapacity = 4, InstanceFunctions = new List <FunctionType>() { FunctionType.SMA_Short, FunctionType.SMA_Long } }; // Build instance request payload var instanceForAlgo = InstanceDataBuilder.BuildInstanceData(algoData, walletDTO, algoInstanceType, instanceParameters, daysOffsetDTO); string url = ApiPaths.ALGO_STORE_ALGO_INSTANCE_DATA; var postInstanceDataResponse = await Consumer.ExecuteRequest(url, Helpers.EmptyDictionary, JsonUtils.SerializeObject(instanceForAlgo), Method.POST); AlgoErrorDTO postInstanceDataResponseDTO = JsonUtils.DeserializeJson <AlgoErrorDTO>(postInstanceDataResponse.ResponseJson); Assert.That(postInstanceDataResponse.Status, Is.EqualTo(HttpStatusCode.BadRequest), "should be bad response erorr code"); Assert.That(postInstanceDataResponseDTO.ErrorMessage, Does.Contain("ValidationError Message:Asset <USD> is not valid for asset pair <BTCEUR>"), "we should receive erorr for the invalid traded asset"); }