Completed
Push — master ( 19c355...d500cb )
by Guillermo A.
02:33
created

DynamoDbAdapterTest::tearDown()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 5
c 0
b 0
f 0
rs 10
cc 2
nc 2
nop 0
1
<?php
2
3
namespace GuillermoandraeTest\DynamoDb;
4
5
use Aws\DynamoDb\DynamoDbClient;
6
use Guillermoandrae\DynamoDb\Constant\Operators;
7
use Guillermoandrae\DynamoDb\Exception;
8
9
final class DynamoDbAdapterTest extends TestCase
10
{
11
    public function testCreateDeleteListTable()
12
    {
13
        $this->adapter->useTable('widgets')->createTable([
14
            'name' => ['attributeType' => 'S', 'keyType' => 'HASH'],
15
            'date' => ['attributeType' => 'N', 'keyType' => 'RANGE'],
16
        ]);
17
        $this->assertTrue($this->adapter->useTable('widgets')->tableExists());
18
        $this->adapter->useTable('widgets')->deleteTable();
19
        $this->assertFalse($this->adapter->useTable('widgets')->tableExists());
20
    }
21
22
    public function testTableExists()
23
    {
24
        $this->adapter->useTable('widgets')->createTable([
25
            'name' => ['attributeType' => 'S', 'keyType' => 'HASH'],
26
            'date' => ['attributeType' => 'N', 'keyType' => 'RANGE'],
27
        ]);
28
        $this->assertFalse($this->adapter->tableExists('nonexistent'));
29
        $this->assertTrue($this->adapter->useTable('nonexistent')->tableExists('widgets'));
30
        $this->adapter->useTable('widgets')->deleteTable();
31
        $this->assertFalse($this->adapter->tableExists('widgets'));
32
    }
33
    
34
    public function testBadCreateTable()
35
    {
36
        $this->expectException(Exception::class);
37
        $this->adapter->useTable('te\st')->createTable(['name' => ['attributeType' => 'S', 'keyType' => 'HASH']]);
38
    }
39
40
    public function testBadCreateTableBadKeySchema()
41
    {
42
        $this->expectException(Exception::class);
43
        $this->adapter->useTable('test')->createTable([]);
44
    }
45
46
    public function testBadDeleteTable()
47
    {
48
        $this->expectException(Exception::class);
49
        $this->adapter->useTable('test')->deleteTable();
50
    }
51
52
    public function testDescribeTable()
53
    {
54
        $this->adapter->useTable('test')->createTable(['name' => ['attributeType' => 'S', 'keyType' => 'HASH']]);
55
        $results = $this->adapter->useTable('test')->describeTable();
56
        $this->assertSame(5, $results['ProvisionedThroughput']['ReadCapacityUnits']);
57
        $this->adapter->useTable('test')->deleteTable();
58
    }
59
60
    public function testBadDescribeTable()
61
    {
62
        $this->expectException(Exception::class);
63
        $this->adapter->useTable('juniper')->describeTable();
64
    }
65
66
    public function testBadFindAll()
67
    {
68
        $this->expectException(Exception::class);
69
        $this->adapter->useTable('test')->findAll();
70
    }
71
72
    public function testFindAll()
73
    {
74
        $adapter = $this->adapter->useTable('test');
75
        $adapter->createTable([
76
            'name' => ['attributeType' => 'S', 'keyType' => 'HASH'],
77
            'date' => ['attributeType' => 'N', 'keyType' => 'RANGE'],
78
        ]);
79
        $adapter->insert(['name' => 'Guillermo', 'date' => time()]);
80
        $adapter->insert(['name' => 'Fisher', 'date' => time()]);
81
        $items = $adapter->findAll();
82
        $adapter->deleteTable();
83
        $this->assertCount(2, $items);
84
    }
85
86
    public function testBadFindWhere()
87
    {
88
        $this->expectException(Exception::class);
89
        $this->adapter->useTable('test')->findWhere([]);
90
    }
91
92
    public function testFindWhere()
93
    {
94
        $adapter = $this->adapter->useTable('test');
95
        $adapter->createTable([
96
            'firstName' => ['attributeType' => 'S', 'keyType' => 'HASH'],
97
            'age' => ['attributeType' => 'N', 'keyType' => 'RANGE'],
98
        ]);
99
        $adapter->insert(['firstName' => 'Guillermo', 'hobby' => 'sleeping', 'age' => 40]);
100
        $adapter->insert(['firstName' => 'Guillermo', 'hobby' => 'coding', 'age' => 40]);
101
        $adapter->insert(['firstName' => 'William', 'hobby' => 'drawing', 'age' => 24]);
102
        $adapter->insert(['firstName' => 'William', 'hobby' => 'playing', 'age' => 15]);
103
        $adapter->insert(['firstName' => 'William', 'hobby' => 'writing', 'age' => 20]);
104
105
        $items = $adapter->findWhere([
106
            'partition' => [
107
                'name' => 'firstName',
108
                'value' => 'William'
109
            ],
110
            'sort' => [
111
                'name' => 'age',
112
                'operator' => Operators::GTE,
113
                'value' => 16
114
            ]
115
        ]);
116
        $adapter->deleteTable();
117
        $this->assertCount(2, $items);
118
    }
119
120
    public function testBadFind()
121
    {
122
        $this->expectException(Exception::class);
123
        $this->adapter->useTable('test')->find([]);
124
    }
125
126
    public function testFind()
127
    {
128
        $adapter = $this->adapter->useTable('test');
129
        $adapter->createTable([
130
            'name' => ['attributeType' => 'S', 'keyType' => 'HASH'],
131
            'date' => ['attributeType' => 'N', 'keyType' => 'RANGE'],
132
        ]);
133
        $timestamp = time();
134
        $key = ['name' => 'Guillermo', 'date' => $timestamp];
135
        $adapter->insert(array_merge($key, ['lastName' => 'Fisher']));
136
        $item = $adapter->find($key);
137
        $this->assertSame($item['lastName'], 'Fisher');
138
        $adapter->deleteTable();
139
    }
140
141
    public function testBadInsert()
142
    {
143
        $this->expectException(Exception::class);
144
        $this->adapter->useTable('test')->insert([]);
145
    }
146
147
    public function testBadDelete()
148
    {
149
        $this->expectException(Exception::class);
150
        $this->adapter->useTable('test')->delete([]);
151
    }
152
153
    public function testDelete()
154
    {
155
        $adapter = $this->adapter->useTable('test');
156
        $adapter->createTable([
157
            'name' => ['attributeType' => 'S', 'keyType' => 'HASH'],
158
            'date' => ['attributeType' => 'N', 'keyType' => 'RANGE'],
159
        ]);
160
        $key = ['name' => 'Guillermo', 'date' => time()];
161
        $adapter->insert(array_merge(['name' => 'Guillermo', 'date' => time(), 'lastName' => 'Fisher']));
162
        $this->assertTrue($adapter->delete($key));
163
        $this->assertCount(0, $adapter->findAll());
164
        $adapter->deleteTable();
165
    }
166
167
    public function testGetClient()
168
    {
169
        $this->assertInstanceOf(DynamoDbClient::class, $this->adapter->getClient());
170
    }
171
}
172