Skip to content

Commit

Permalink
Merge pull request #4 from Chemaclass/using-variadic-funtions-refacto…
Browse files Browse the repository at this point in the history
…ring

Refactoring: variadic functions & psalmphp
  • Loading branch information
Chemaclass committed May 29, 2020
2 parents 13ac766 + 1dd1adc commit f27e952
Show file tree
Hide file tree
Showing 18 changed files with 48 additions and 57 deletions.
1 change: 0 additions & 1 deletion src/EdifactParser.php
Expand Up @@ -9,7 +9,6 @@
use EdifactParser\Segments\SegmentFactory;
use EdifactParser\Segments\SegmentFactoryInterface;

/** @psalmphp-immutable */
final class EdifactParser
{
private SegmentFactoryInterface $segmentFactory;
Expand Down
1 change: 0 additions & 1 deletion src/Exception/InvalidFile.php
Expand Up @@ -7,7 +7,6 @@
use Exception;
use function json_encode;

/** @psalmphp-immutable */
final class InvalidFile extends Exception
{
public static function withErrors(array $errors): self
Expand Down
1 change: 0 additions & 1 deletion src/SegmentedValues.php
Expand Up @@ -8,7 +8,6 @@
use EdifactParser\Segments\SegmentFactoryInterface;
use EdifactParser\Segments\SegmentInterface;

/** @psalmphp-immutable */
final class SegmentedValues
{
/** @psalm-var list<SegmentInterface> */
Expand Down
1 change: 0 additions & 1 deletion src/Segments/BGMBeginningOfMessage.php
Expand Up @@ -4,7 +4,6 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class BGMBeginningOfMessage implements SegmentInterface
{
private array $rawValues;
Expand Down
1 change: 0 additions & 1 deletion src/Segments/CNTControl.php
Expand Up @@ -6,7 +6,6 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class CNTControl implements SegmentInterface
{
private array $rawValues;
Expand Down
1 change: 0 additions & 1 deletion src/Segments/DTMDateTimePeriod.php
Expand Up @@ -4,7 +4,6 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class DTMDateTimePeriod implements SegmentInterface
{
private array $rawValues;
Expand Down
1 change: 0 additions & 1 deletion src/Segments/MEADimensions.php
Expand Up @@ -6,7 +6,6 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class MEADimensions implements SegmentInterface
{
private array $rawValues;
Expand Down
1 change: 0 additions & 1 deletion src/Segments/NADNameAddress.php
Expand Up @@ -6,7 +6,6 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class NADNameAddress implements SegmentInterface
{
private array $rawValues;
Expand Down
1 change: 0 additions & 1 deletion src/Segments/PCIPackageId.php
Expand Up @@ -4,7 +4,6 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class PCIPackageId implements SegmentInterface
{
private array $rawValues;
Expand Down
5 changes: 1 addition & 4 deletions src/Segments/SegmentFactory.php
Expand Up @@ -4,14 +4,11 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class SegmentFactory implements SegmentFactoryInterface
{
public function segmentFromArray(array $rawArray): SegmentInterface
{
$name = $rawArray[0];

switch ($name) {
switch ($rawArray[0]) {
case 'UNH':
return new UNHMessageHeader($rawArray);
case 'DTM':
Expand Down
1 change: 0 additions & 1 deletion src/Segments/UNHMessageHeader.php
Expand Up @@ -4,7 +4,6 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class UNHMessageHeader implements SegmentInterface
{
private array $rawValues;
Expand Down
1 change: 0 additions & 1 deletion src/Segments/UNTMessageFooter.php
Expand Up @@ -4,7 +4,6 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class UNTMessageFooter implements SegmentInterface
{
private array $rawValues;
Expand Down
1 change: 0 additions & 1 deletion src/Segments/UnknownSegment.php
Expand Up @@ -4,7 +4,6 @@

namespace EdifactParser\Segments;

/** @psalmphp-immutable */
final class UnknownSegment implements SegmentInterface
{
private array $rawValues;
Expand Down
9 changes: 6 additions & 3 deletions src/TransactionMessage.php
Expand Up @@ -6,7 +6,6 @@

use EdifactParser\Segments\SegmentInterface;

/** @psalmphp-immutable */
final class TransactionMessage
{
/**
Expand All @@ -17,11 +16,15 @@ final class TransactionMessage
*/
private array $segments = [];

public function __construct(array $segments = [])
public static function withSegments(SegmentInterface...$segments): self
{
$self = new self();

foreach ($segments as $segment) {
$this->addSegment($segment);
$self->addSegment($segment);
}

return $self;
}

public function addSegment(SegmentInterface $segment): void
Expand Down
3 changes: 0 additions & 3 deletions src/TransactionResult.php
Expand Up @@ -8,8 +8,6 @@

/**
* A transactionResult is a list of transactionMessages.
*
* @psalmphp-immutable
*/
final class TransactionResult
{
Expand All @@ -33,7 +31,6 @@ private function __construct(SegmentedValues $values)
if ($message) {
$messages[] = $message;
}

$message = new TransactionMessage();
}

Expand Down
23 changes: 17 additions & 6 deletions tests/Unit/SegmentedValuesTest.php
Expand Up @@ -6,22 +6,33 @@

use EDI\Parser;
use EdifactParser\SegmentedValues;
use EdifactParser\Segments\SegmentFactory;
use EdifactParser\Segments\CNTControl;
use EdifactParser\Segments\UNHMessageHeader;
use PHPUnit\Framework\TestCase;

final class SegmentedValuesTest extends TestCase
{
/** @test */
public function getListOfSegments(): void
public function listWithOneSegment(): void
{
$fileContent = "UNH+1+IFTMIN:S:93A:UN:PN001'\nUNH+2+IFTMIN:S:93A:UN:PN001'";
$parser = new Parser($fileContent);
$values = (new SegmentedValues(new SegmentFactory()))->fromRaw($parser->get());
$fileContent = "UNH+1+IFTMIN:S:93A:UN:PN001'";
$values = SegmentedValues::factory()->fromRaw((new Parser($fileContent))->get());

self::assertEquals([
new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
new UNHMessageHeader(['UNH', '2', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
], $values->list());
}

/** @test */
public function listWithMultipleSegments(): void
{
$fileContent = "UNH+1+IFTMIN:S:1A:UN:P1'\nUNH+2+IFTMIN:R:2A:UN:P2'\nCNT+7:0.1:KGM'";
$values = SegmentedValues::factory()->fromRaw((new Parser($fileContent))->get());

self::assertEquals([
new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '1A', 'UN', 'P1']]),
new UNHMessageHeader(['UNH', '2', ['IFTMIN', 'R', '2A', 'UN', 'P2']]),
new CNTControl(['CNT', ['7', '0.1', 'KGM']]),
], $values->list());
}
}
12 changes: 6 additions & 6 deletions tests/Unit/TransactionMessageTest.php
Expand Up @@ -16,10 +16,10 @@ final class TransactionMessageTest extends TestCase
/** @test */
public function twoSegmentsWithDifferentNames(): void
{
$message = new TransactionMessage([
$message = TransactionMessage::withSegments(
new CNTControl(['CNT', ['7', '0.1', 'KGM']]),
new MEADimensions(['MEA', 'WT', 'G', ['KGM', '0.1']]),
]);
);

self::assertEquals([
CNTControl::class => [
Expand All @@ -34,12 +34,12 @@ public function twoSegmentsWithDifferentNames(): void
/** @test */
public function twoSegmentsWithTheSameName(): void
{
$message = new TransactionMessage([
$message = TransactionMessage::withSegments(
new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
new UNTMessageFooter(['UNT', '19', '1']),
new MEADimensions(['MEA', 'WT', 'G', ['KGM', '0.1']]),
new MEADimensions(['MEA', 'VOL', '', ['MTQ', '0.06822']]),
]);
);

self::assertEquals([
UNHMessageHeader::class => [
Expand All @@ -58,13 +58,13 @@ public function twoSegmentsWithTheSameName(): void
/** @test */
public function moreThanTwoSegmentsWithTheSameName(): void
{
$message = new TransactionMessage([
$message = TransactionMessage::withSegments(
new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
new UNTMessageFooter(['UNT', '19', '1']),
new CNTControl(['CNT', ['7', '0.1', 'KGM']]),
new CNTControl(['CNT', ['11', '1', 'PCE']]),
new CNTControl(['CNT', ['15', '0.068224', 'MTQ']]),
]);
);

self::assertEquals([
UNHMessageHeader::class => [
Expand Down
41 changes: 18 additions & 23 deletions tests/Unit/TransactionResultTest.php
Expand Up @@ -21,16 +21,12 @@ public function oneMessage(): void
{
$fileContent = "UNH+1+IFTMIN:S:93A:UN:PN001'\nUNT+19+1'";

$result = TransactionResult::fromSegmentedValues(
SegmentedValues::factory()->fromRaw((new Parser($fileContent))->get())
);

self::assertEquals([
new TransactionMessage([
TransactionMessage::withSegments(
new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
new UNTMessageFooter(['UNT', '19', '1']),
]),
], $result->messages());
),
], $this->resultFactory($fileContent)->messages());
}

/** @test */
Expand All @@ -44,21 +40,17 @@ public function twoMessages(): void
UNT+19+2'
UNZ+2+3'
EDI;
$result = TransactionResult::fromSegmentedValues(
SegmentedValues::factory()->fromRaw((new Parser($fileContent))->get())
);

self::assertEquals([
new TransactionMessage([
TransactionMessage::withSegments(
new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
new UNTMessageFooter(['UNT', '19', '1']),
]),
new TransactionMessage([
),
TransactionMessage::withSegments(
new UNHMessageHeader(['UNH', '2', ['IFTMIN', 'S', '94A', 'UN', 'PN002']]),
new UNTMessageFooter(['UNT', '19', '2']),
new UnknownSegment(['UNZ', '2', '3']),
]),
], $result->messages());
),
], $this->resultFactory($fileContent)->messages());
}

/** @test */
Expand All @@ -73,19 +65,22 @@ public function oneMessageWithMultipleSegmentsWithTheSameName(): void
UNT+19+1'
UNZ+2+3'
EDI;
$result = TransactionResult::fromSegmentedValues(
SegmentedValues::factory()->fromRaw((new Parser($fileContent))->get())
);

self::assertEquals([
new TransactionMessage([
TransactionMessage::withSegments(
new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
new UNTMessageFooter(['UNT', '19', '1']),
new CNTControl(['CNT', ['7', '0.1', 'KGM']]),
new CNTControl(['CNT', ['11', '1', 'PCE']]),
new CNTControl(['CNT', ['15', '0.068224', 'MTQ']]),
new UnknownSegment(['UNZ', '2', '3']),
]),
], $result->messages());
),
], $this->resultFactory($fileContent)->messages());
}

private function resultFactory(string $fileContent): TransactionResult
{
return TransactionResult::fromSegmentedValues(
SegmentedValues::factory()->fromRaw((new Parser($fileContent))->get())
);
}
}

0 comments on commit f27e952

Please sign in to comment.