From ae6f5a20c2eb24ee22a6b76f969da8772dd4039e Mon Sep 17 00:00:00 2001 From: Timirey Date: Mon, 1 Jul 2024 14:04:44 +0300 Subject: [PATCH] Add more enums and tests --- src/Connections/Client.php | 12 +++-- src/{ => Connections}/Enums/Host.php | 2 +- src/Payloads/Data/ChartLastInfoRecord.php | 12 ++--- src/Payloads/Data/ChartRangeInfoRecord.php | 12 ++--- src/Payloads/Data/TradeTransInfo.php | 11 ++-- src/{ => Payloads}/Enums/Cmd.php | 2 +- src/{ => Payloads}/Enums/Level.php | 2 +- src/{ => Payloads}/Enums/Period.php | 2 +- src/Payloads/Enums/Type.php | 34 ++++++++++++ src/Payloads/GetProfitCalculationPayload.php | 8 +-- src/Payloads/GetTickPricesPayload.php | 8 +-- src/Responses/Data/CalendarRecord.php | 2 +- src/Responses/Data/IbRecord.php | 2 +- src/Responses/Data/QuotesRecord.php | 2 +- src/Responses/Data/SymbolRecord.php | 6 +-- src/Responses/Data/TickRecord.php | 2 +- src/Responses/Data/TradeRecord.php | 3 +- src/Responses/Data/TradingRecord.php | 10 +++- src/Responses/Enums/Cmd.php | 49 +++++++++++++++++ src/{ => Responses}/Enums/Day.php | 2 +- src/{ => Responses}/Enums/Impact.php | 2 +- src/Responses/Enums/Level.php | 24 +++++++++ src/{ => Responses}/Enums/MarginMode.php | 2 +- src/Responses/Enums/Period.php | 54 +++++++++++++++++++ src/{ => Responses}/Enums/ProfitMode.php | 2 +- src/{ => Responses}/Enums/QuoteId.php | 2 +- src/Responses/Enums/RequestStatus.php | 29 ++++++++++ src/{ => Responses}/Enums/Side.php | 2 +- .../TradeTransactionStatusResponse.php | 10 +++- tests/Connections/ClientCommandTest.php | 41 +++++++------- 30 files changed, 277 insertions(+), 74 deletions(-) rename src/{ => Connections}/Enums/Host.php (86%) rename src/{ => Payloads}/Enums/Cmd.php (93%) rename src/{ => Payloads}/Enums/Level.php (88%) rename src/{ => Payloads}/Enums/Period.php (94%) create mode 100644 src/Payloads/Enums/Type.php create mode 100644 src/Responses/Enums/Cmd.php rename src/{ => Responses}/Enums/Day.php (92%) rename src/{ => Responses}/Enums/Impact.php (86%) create mode 100644 src/Responses/Enums/Level.php rename src/{ => Responses}/Enums/MarginMode.php (86%) create mode 100644 src/Responses/Enums/Period.php rename src/{ => Responses}/Enums/ProfitMode.php (81%) rename src/{ => Responses}/Enums/QuoteId.php (88%) create mode 100644 src/Responses/Enums/RequestStatus.php rename src/{ => Responses}/Enums/Side.php (81%) diff --git a/src/Connections/Client.php b/src/Connections/Client.php index 8e8ad9c..ccbb024 100644 --- a/src/Connections/Client.php +++ b/src/Connections/Client.php @@ -2,11 +2,13 @@ namespace Timirey\XApi\Connections; -use Timirey\XApi\Enums\Host; +use Timirey\XApi\Connections\Enums\Host; use Timirey\XApi\Payloads\AbstractPayload; use Timirey\XApi\Payloads\Data\ChartLastInfoRecord; use Timirey\XApi\Payloads\Data\ChartRangeInfoRecord; use Timirey\XApi\Payloads\Data\TradeTransInfo; +use Timirey\XApi\Payloads\Enums\Cmd; +use Timirey\XApi\Payloads\Enums\Level; use Timirey\XApi\Payloads\GetAllSymbolsPayload; use Timirey\XApi\Payloads\GetCalendarPayload; use Timirey\XApi\Payloads\GetChartLastRequestPayload; @@ -278,7 +280,7 @@ public function getIbsHistory(int $start, int $end): GetIbsHistoryResponse * Calculates estimated profit for given deal data. * * @param float $closePrice - * @param int $cmd + * @param Cmd $cmd * @param float $openPrice * @param string $symbol * @param float $volume @@ -286,7 +288,7 @@ public function getIbsHistory(int $start, int $end): GetIbsHistoryResponse */ public function getProfitCalculation( float $closePrice, - int $cmd, + Cmd $cmd, float $openPrice, string $symbol, float $volume @@ -320,12 +322,12 @@ public function getStepRules(): GetStepRulesResponse /** * Returns array of current quotations for given symbols. * - * @param int $level + * @param Level $level * @param array $symbols * @param int $timestamp * @return GetTickPricesResponse */ - public function getTickPrices(int $level, array $symbols, int $timestamp): GetTickPricesResponse + public function getTickPrices(Level $level, array $symbols, int $timestamp): GetTickPricesResponse { return $this->sendRequest( new GetTickPricesPayload($level, $symbols, $timestamp), diff --git a/src/Enums/Host.php b/src/Connections/Enums/Host.php similarity index 86% rename from src/Enums/Host.php rename to src/Connections/Enums/Host.php index 2381ae5..3b8ab5a 100644 --- a/src/Enums/Host.php +++ b/src/Connections/Enums/Host.php @@ -1,6 +1,6 @@ period = Period::from($period); } } diff --git a/src/Payloads/Data/ChartRangeInfoRecord.php b/src/Payloads/Data/ChartRangeInfoRecord.php index 463c45d..dc0e7e1 100644 --- a/src/Payloads/Data/ChartRangeInfoRecord.php +++ b/src/Payloads/Data/ChartRangeInfoRecord.php @@ -2,7 +2,7 @@ namespace Timirey\XApi\Payloads\Data; -use Timirey\XApi\Enums\Period; +use Timirey\XApi\Payloads\Enums\Period; /** * Class representing the range chart information record. @@ -11,27 +11,21 @@ */ class ChartRangeInfoRecord { - /** - * @var Period Period code. - */ - public Period $period; - /** * Constructor for ChartRangeInfoRecord. * - * @param int $period Period code. + * @param Period $period Period code. * @param int $start Start of chart block (milliseconds since epoch). * @param int $end End of chart block (milliseconds since epoch). * @param string $symbol Symbol. * @param int|null $ticks Number of ticks needed (optional). */ public function __construct( - int $period, + public Period $period, public int $start, public int $end, public string $symbol, public ?int $ticks = null ) { - $this->period = Period::from($period); } } diff --git a/src/Payloads/Data/TradeTransInfo.php b/src/Payloads/Data/TradeTransInfo.php index 9ca0b53..55b6366 100644 --- a/src/Payloads/Data/TradeTransInfo.php +++ b/src/Payloads/Data/TradeTransInfo.php @@ -2,6 +2,9 @@ namespace Timirey\XApi\Payloads\Data; +use Timirey\XApi\Payloads\Enums\Cmd; +use Timirey\XApi\Payloads\Enums\Type; + /** * Class representing trade transaction information. * @@ -13,7 +16,7 @@ class TradeTransInfo /** * Constructor for TradeTransInfo. * - * @param int $cmd Operation code. + * @param Cmd $cmd Operation code. * @param string|null $customComment The value the customer may provide in order to retrieve it later. * @param int $expiration Pending order expiration time. * @param int $offset Trailing offset. @@ -22,11 +25,11 @@ class TradeTransInfo * @param float $sl Stop loss. * @param string $symbol Trade symbol. * @param float $tp Take profit. - * @param int $type Trade transaction type. + * @param Type $type Trade transaction type. * @param float $volume Trade volume. */ public function __construct( - public int $cmd, + public Cmd $cmd, public ?string $customComment, public int $expiration, public int $offset, @@ -35,7 +38,7 @@ public function __construct( public float $sl, public string $symbol, public float $tp, - public int $type, + public Type $type, public float $volume ) { } diff --git a/src/Enums/Cmd.php b/src/Payloads/Enums/Cmd.php similarity index 93% rename from src/Enums/Cmd.php rename to src/Payloads/Enums/Cmd.php index 1d44866..1bd6936 100644 --- a/src/Enums/Cmd.php +++ b/src/Payloads/Enums/Cmd.php @@ -1,6 +1,6 @@ arguments['closePrice'] = $closePrice; - $this->arguments['cmd'] = Cmd::from($cmd); + $this->arguments['cmd'] = $cmd->value; $this->arguments['openPrice'] = $openPrice; $this->arguments['symbol'] = $symbol; $this->arguments['volume'] = $volume; diff --git a/src/Payloads/GetTickPricesPayload.php b/src/Payloads/GetTickPricesPayload.php index 5364903..c41159e 100644 --- a/src/Payloads/GetTickPricesPayload.php +++ b/src/Payloads/GetTickPricesPayload.php @@ -2,7 +2,7 @@ namespace Timirey\XApi\Payloads; -use Timirey\XApi\Enums\Level; +use Timirey\XApi\Payloads\Enums\Level; /** * Class that contains payload for the getTickPrices command. @@ -12,13 +12,13 @@ class GetTickPricesPayload extends AbstractPayload /** * Constructor for GetTickPricesPayload. * - * @param int $level Price level. + * @param Level $level Price level. * @param array $symbols Array of symbol names. * @param int $timestamp The time from which the most recent tick should be looked for. */ - public function __construct(int $level, array $symbols, int $timestamp) + public function __construct(Level $level, array $symbols, int $timestamp) { - $this->arguments['level'] = Level::from($level); + $this->arguments['level'] = $level->value; $this->arguments['symbols'] = $symbols; $this->arguments['timestamp'] = $timestamp; } diff --git a/src/Responses/Data/CalendarRecord.php b/src/Responses/Data/CalendarRecord.php index 5cf169d..710f059 100644 --- a/src/Responses/Data/CalendarRecord.php +++ b/src/Responses/Data/CalendarRecord.php @@ -2,7 +2,7 @@ namespace Timirey\XApi\Responses\Data; -use Timirey\XApi\Enums\Impact; +use Timirey\XApi\Responses\Enums\Impact; /** * Class representing a calendar record. diff --git a/src/Responses/Data/IbRecord.php b/src/Responses/Data/IbRecord.php index e1986a3..a6d748b 100644 --- a/src/Responses/Data/IbRecord.php +++ b/src/Responses/Data/IbRecord.php @@ -2,7 +2,7 @@ namespace Timirey\XApi\Responses\Data; -use Timirey\XApi\Enums\Side; +use Timirey\XApi\Responses\Enums\Side; /** * Class representing an IB record. diff --git a/src/Responses/Data/QuotesRecord.php b/src/Responses/Data/QuotesRecord.php index 097478a..46d1d79 100644 --- a/src/Responses/Data/QuotesRecord.php +++ b/src/Responses/Data/QuotesRecord.php @@ -2,7 +2,7 @@ namespace Timirey\XApi\Responses\Data; -use Timirey\XApi\Enums\Day; +use Timirey\XApi\Responses\Enums\Day; /** * Class representing a quotes record. diff --git a/src/Responses/Data/SymbolRecord.php b/src/Responses/Data/SymbolRecord.php index 31acb7c..da0e612 100644 --- a/src/Responses/Data/SymbolRecord.php +++ b/src/Responses/Data/SymbolRecord.php @@ -2,9 +2,9 @@ namespace Timirey\XApi\Responses\Data; -use Timirey\XApi\Enums\MarginMode; -use Timirey\XApi\Enums\ProfitMode; -use Timirey\XApi\Enums\QuoteId; +use Timirey\XApi\Responses\Enums\MarginMode; +use Timirey\XApi\Responses\Enums\ProfitMode; +use Timirey\XApi\Responses\Enums\QuoteId; /** * Class representing a symbol record. diff --git a/src/Responses/Data/TickRecord.php b/src/Responses/Data/TickRecord.php index 04e3fd9..3332391 100644 --- a/src/Responses/Data/TickRecord.php +++ b/src/Responses/Data/TickRecord.php @@ -2,7 +2,7 @@ namespace Timirey\XApi\Responses\Data; -use Timirey\XApi\Enums\Level; +use Timirey\XApi\Responses\Enums\Level; /** * Class representing a tick record. diff --git a/src/Responses/Data/TradeRecord.php b/src/Responses/Data/TradeRecord.php index 092f3e2..6a37634 100644 --- a/src/Responses/Data/TradeRecord.php +++ b/src/Responses/Data/TradeRecord.php @@ -2,8 +2,7 @@ namespace Timirey\XApi\Responses\Data; -use Timirey\XApi\Enums\Cmd; -use Timirey\XApi\Enums\Level; +use Timirey\XApi\Responses\Enums\Cmd; /** * Class representing a trade record. diff --git a/src/Responses/Data/TradingRecord.php b/src/Responses/Data/TradingRecord.php index 8f12442..cfce7dc 100644 --- a/src/Responses/Data/TradingRecord.php +++ b/src/Responses/Data/TradingRecord.php @@ -2,11 +2,18 @@ namespace Timirey\XApi\Responses\Data; +use Timirey\XApi\Responses\Enums\Day; + /** * Class representing a trading record. */ class TradingRecord { + /** + * @var Day Day of week. + */ + public Day $day; + /** * Constructor for TradingRecord. * @@ -14,7 +21,8 @@ class TradingRecord * @param int $fromT Start time in ms from 00:00 CET / CEST time zone. * @param int $toT End time in ms from 00:00 CET / CEST time zone. */ - public function __construct(public int $day, public int $fromT, public int $toT) + public function __construct(int $day, public int $fromT, public int $toT) { + $this->day = Day::from($day); } } diff --git a/src/Responses/Enums/Cmd.php b/src/Responses/Enums/Cmd.php new file mode 100644 index 0000000..f3a473c --- /dev/null +++ b/src/Responses/Enums/Cmd.php @@ -0,0 +1,49 @@ +requestStatus = RequestStatus::from($requestStatus); } } diff --git a/tests/Connections/ClientCommandTest.php b/tests/Connections/ClientCommandTest.php index b78e758..9345a6b 100644 --- a/tests/Connections/ClientCommandTest.php +++ b/tests/Connections/ClientCommandTest.php @@ -1,14 +1,12 @@ and($tradeTransactionStatusResponse->bid)->toBe(1.12345) ->and($tradeTransactionStatusResponse->customComment)->toBe('Test trade') ->and($tradeTransactionStatusResponse->message)->toBe('Success') - ->and($tradeTransactionStatusResponse->requestStatus)->toBe(1); + ->and($tradeTransactionStatusResponse->requestStatus)->toBe(RequestStatus::PENDING); }); test('ping command', function () { @@ -441,7 +446,7 @@ public function setWebSocketClient(WebSocketClient $client): void test('getChartLastRequest command', function () { $chartLastInfoRecord = new ChartLastInfoRecord( - period: 1, + period: Period::PERIOD_M1, start: 1389374640000, symbol: 'EURUSD' ); @@ -495,7 +500,7 @@ public function setWebSocketClient(WebSocketClient $client): void test('getChartRangeRequest command', function () { $chartRangeInfoRecord = new ChartRangeInfoRecord( - period: 60, + period: Period::PERIOD_H1, start: 1389374640000, // Example start timestamp in milliseconds (Jan 10, 2014 3:04:00 PM) end: 1389378240000, // Example end timestamp in milliseconds symbol: 'EURUSD', @@ -790,7 +795,7 @@ public function setWebSocketClient(WebSocketClient $client): void test('getProfitCalculation command', function () { $closePrice = 1.3000; - $cmd = 0; + $cmd = PayloadCmd::BUY; $openPrice = 1.2233; $symbol = 'EURPLN'; $volume = 1.0; @@ -908,7 +913,7 @@ public function setWebSocketClient(WebSocketClient $client): void }); test('getTickPrices command', function () { - $level = 0; + $level = PayloadLevel::BASE; $symbols = ['EURPLN', 'AGO.PL']; $timestamp = 1262944112000; $getTickPricesPayload = new GetTickPricesPayload($level, $symbols, $timestamp); @@ -927,7 +932,7 @@ public function setWebSocketClient(WebSocketClient $client): void 'bid' => 4000.0, 'bidVolume' => 16000, 'high' => 4000.0, - 'level' => Level::BASE, + 'level' => ResponseLevel::BASE, 'exemode' => 1, 'low' => 3500.0, 'spreadRaw' => 0.000003, @@ -957,7 +962,7 @@ public function setWebSocketClient(WebSocketClient $client): void ->and($getTickPricesResponse->quotations[0]->bid)->toBe(4000.0) ->and($getTickPricesResponse->quotations[0]->bidVolume)->toBe(16000) ->and($getTickPricesResponse->quotations[0]->high)->toBe(4000.0) - ->and($getTickPricesResponse->quotations[0]->level)->toBe(Level::BASE) + ->and($getTickPricesResponse->quotations[0]->level)->toBe(ResponseLevel::BASE) ->and($getTickPricesResponse->quotations[0]->low)->toBe(3500.0) ->and($getTickPricesResponse->quotations[0]->spreadRaw)->toBe(0.000003) ->and($getTickPricesResponse->quotations[0]->spreadTable)->toBe(0.00042) @@ -1024,7 +1029,7 @@ public function setWebSocketClient(WebSocketClient $client): void ->and($getTradeRecordsResponse->tradeRecords[0]->close_time)->toBeNull() ->and($getTradeRecordsResponse->tradeRecords[0]->close_timeString)->toBeNull() ->and($getTradeRecordsResponse->tradeRecords[0]->closed)->toBeFalse() - ->and($getTradeRecordsResponse->tradeRecords[0]->cmd)->toBe(Cmd::BUY) + ->and($getTradeRecordsResponse->tradeRecords[0]->cmd)->toBe(ResponseCmd::BUY) ->and($getTradeRecordsResponse->tradeRecords[0]->comment)->toBe('Web Trader') ->and($getTradeRecordsResponse->tradeRecords[0]->commission)->toBe(0.0) ->and($getTradeRecordsResponse->tradeRecords[0]->customComment)->toBe('Some text') @@ -1107,7 +1112,7 @@ public function setWebSocketClient(WebSocketClient $client): void ->and($getTradesResponse->tradeRecords[0]->close_time)->toBeNull() ->and($getTradesResponse->tradeRecords[0]->close_timeString)->toBeNull() ->and($getTradesResponse->tradeRecords[0]->closed)->toBeFalse() - ->and($getTradesResponse->tradeRecords[0]->cmd)->toBe(Cmd::BUY) + ->and($getTradesResponse->tradeRecords[0]->cmd)->toBe(ResponseCmd::BUY) ->and($getTradesResponse->tradeRecords[0]->comment)->toBe('Web Trader') ->and($getTradesResponse->tradeRecords[0]->commission)->toBe(0.0) ->and($getTradesResponse->tradeRecords[0]->customComment)->toBe('Some text') @@ -1191,7 +1196,7 @@ public function setWebSocketClient(WebSocketClient $client): void ->and($getTradesHistoryResponse->tradeRecords[0]->close_time)->toBeNull() ->and($getTradesHistoryResponse->tradeRecords[0]->close_timeString)->toBeNull() ->and($getTradesHistoryResponse->tradeRecords[0]->closed)->toBeFalse() - ->and($getTradesHistoryResponse->tradeRecords[0]->cmd)->toBe(Cmd::BUY) + ->and($getTradesHistoryResponse->tradeRecords[0]->cmd)->toBe(ResponseCmd::BUY) ->and($getTradesHistoryResponse->tradeRecords[0]->comment)->toBe('Web Trader') ->and($getTradesHistoryResponse->tradeRecords[0]->commission)->toBe(0.0) ->and($getTradesHistoryResponse->tradeRecords[0]->customComment)->toBe('Some text') @@ -1257,7 +1262,7 @@ public function setWebSocketClient(WebSocketClient $client): void ->and($getTradingHoursResponse->tradingHoursRecords[0]->quotes[0]->fromT)->toBe(63000000) ->and($getTradingHoursResponse->tradingHoursRecords[0]->quotes[0]->toT)->toBe(63300000) ->and($getTradingHoursResponse->tradingHoursRecords[0]->trading[0])->toBeInstanceOf(TradingRecord::class) - ->and($getTradingHoursResponse->tradingHoursRecords[0]->trading[0]->day)->toBe(2) + ->and($getTradingHoursResponse->tradingHoursRecords[0]->trading[0]->day)->toBe(Day::TUESDAY) ->and($getTradingHoursResponse->tradingHoursRecords[0]->trading[0]->fromT)->toBe(63000000) ->and($getTradingHoursResponse->tradingHoursRecords[0]->trading[0]->toT)->toBe(63300000); });