Completed
Push — master ( 29e67b...7f2aa4 )
by David
14s
created

ServiceTest::testMissingServiceNamePayload()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace TheAentMachine\Registry;
4
5
6
use PHPUnit\Framework\TestCase;
7
use TheAentMachine\Service\Exception\ServiceException;
8
use TheAentMachine\Service\Service;
9
10
class ServiceTest extends TestCase
11
{
12
    private const VALID_PAYLOAD = <<< 'JSON'
13
{
14
  "serviceName" : "foo",
15
  "service": {
16
    "image"         : "foo",
17
    "internalPorts" : [1, 2, 3],
18
    "dependsOn"     : ["foo", "bar"],
19
    "ports"         : [{"source": 80, "target": 8080}],
20
    "environment"   : {
21
                        "FOO": {
22
                          "value": "fooo",
23
                          "type": "containerEnvVariable"
24
                        }
25
                      },
26
    "labels"        : {
27
                        "foo": {"value": "fooo"},
28
                        "bar": {"value": "baar"}
29
                      },               
30
    "volumes"       : [
31
                        {
32
                          "type"      : "volume",
33
                          "source"    : "foo",
34
                          "target"    : "bar",
35
                          "readOnly"  : true
36
                        }
37
                      ]
38
  }
39
}
40
JSON;
41
42
    private const MISSING_SERVICE_NAME_PAYLOAD = <<< 'JSON'
43
{
44
  "service": {
45
    "internalPorts": [80]
46
  }
47
}
48
JSON;
49
50
    private const UNKNOWN_ENV_VARIABLE_TYPE_PAYLOAD = <<< 'JSON'
51
{
52
  "serviceName": "foo",
53
  "service": {
54
    "environment": {
55
      "FOO": {
56
        "value": "fooo",
57
        "type": "YIKES_THATS_SOME_BAD_TYPE_HERE"
58
      }
59
    }
60
  }
61
}
62
JSON;
63
64
    private const UNKNOWN_VOLUME_TYPE_PAYLOAD = <<< 'JSON'
65
{
66
  "serviceName": "foo",
67
  "service": {
68
    "volumes": [
69
      {
70
        "type": "AGAIN?WTF",
71
        "source": "foo"
72
      }
73
    ]
74
  }
75
}
76
JSON;
77
78
    public function testValidPayload() : void
79
    {
80
        $array = json_decode(self::VALID_PAYLOAD, true);
81
        $service = Service::parsePayload($array);
82
        $out = $service->jsonSerialize();
83
        $this->assertEquals($array, $out);
84
    }
85
86
    public function testMissingServiceNamePayload() : void
87
    {
88
        $this->expectException(ServiceException::class);
89
        $array = json_decode(self::MISSING_SERVICE_NAME_PAYLOAD, true);
90
        Service::parsePayload($array)->jsonSerialize();
91
    }
92
93
    public function testUnknownEnvVariableTypePayload() : void
94
    {
95
        $this->expectException(ServiceException::class);
96
        $array = json_decode(self::UNKNOWN_ENV_VARIABLE_TYPE_PAYLOAD, true);
97
        Service::parsePayload($array)->jsonSerialize();
98
    }
99
100
    public function testUnknownVolumeTypePayload() : void
101
    {
102
        $this->expectException(ServiceException::class);
103
        $array = json_decode(self::UNKNOWN_VOLUME_TYPE_PAYLOAD, true);
104
        Service::parsePayload($array)->jsonSerialize();
105
    }
106
}
107