Completed
Push — master ( a45c22...e4b600 )
by Mehmet
04:00
created

MongoDBTest::testFindDocuments()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 35
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 35
rs 8.5806
cc 4
eloc 26
nc 6
nop 0
1
<?php
2
namespace tests;
3
4
use Soupmix\MongoDB;
5
6
class MongoDBTest extends \PHPUnit_Framework_TestCase
7
{
8
    /**
9
     * @var \Soupmix\MongoDB $client
10
     */
11
    protected $client = null;
12
13
    protected function setUp()
14
    {
15
        $this->client = new MongoDB([
16
            'db_name' => 'mydb_test',
17
            'connection_string' => "mongodb://127.0.0.1",
18
            'options' => []
19
        ]);
20
    }
21
22
    public function testInsertGetDocument()
23
    {
24
        $docId = $this->client->insert('test', ['id' => 1, 'title' => 'test']);
25
        $document = $this->client->get('test', $docId);
26
        $this->assertArrayHasKey('title', $document);
27
        $this->assertArrayHasKey('id', $document);
28
        $result = $this->client->delete('test', ['id' => $docId]);
29
        $this->assertTrue($result == 1);
30
    }
31
32
33
34
    public function testFindDocuments()
35
    {
36
        $docIds = [];
37
        $data = $this->bulkData();
38
        foreach ($data as $d) {
39
            $docId = $this->client->insert('test', $d);
40
            $this->assertNotNull($docId, 'Document could not inserted to ES while testing find');
41
            if ($docId) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $docId of type string|null is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
42
                $docIds[] = $docId;
43
            }
44
        }
45
        sleep(1); // waiting to be able to be searchable on elasticsearch.
46
        $results = $this->client->find('test', ['title' => 'test1']);
47
        $this->assertArrayHasKey('total', $results);
48
        $this->assertArrayHasKey('data', $results);
49
        $this->assertCount($results['total'], $results['data']);
50
        $this->assertGreaterThanOrEqual(1, $results['total'], 'Total not equal for field term filtering');
51
52
        $results = $this->client->find('test', ['count.max__gte' => 6]);
53
        $this->assertGreaterThanOrEqual(2, $results['total'],
54
            'Total not greater than or equal to 2 on count_gte filtering');
55
56
        $results = $this->client->find('test', ['count.max__gte' => 6, 'count.min__gte' => 2]);
57
        $this->assertGreaterThanOrEqual(1, $results['total'],
58
            'Total not greater than or equal to 2 on count.max__gte and count.max__gte filtering');
59
60
        $results = $this->client->find('test', [[['count.max__gte' => 6], ['count.min__gte' => 2]], 'title' => 'test4']);
61
        $this->assertGreaterThanOrEqual(1, $results['total'],
62
            'Total not greater than or equal to 2 on count.max__gte and count.max__gte filtering');
63
64
        foreach ($docIds as $docId) {
65
            $result = $this->client->delete('test', ['id' => $docId]);
66
            $this->assertTrue($result == 1);
67
        }
68
    }
69
70
71
72
    public function bulkData()
73
    {
74
        return [
75
            ['id' => 1, 'date' => '2015-04-10 00:00:00', 'title' => 'test1', 'balance' => 100.0, 'count' => ['min' => 1, 'max' => 1]],
76
            ['id' => 2, 'date' => '2015-04-11 00:00:00', 'title' => 'test2', 'balance' => 120.0, 'count' =>  ['min' => 1, 'max' => 1]],
77
            ['id' => 3, 'date' => '2015-04-12 00:00:00', 'title' => 'test3', 'balance' => 101.5, 'count' =>  ['min' => 1, 'max' => 7]],
78
            ['id' => 4, 'date' => '2015-04-12 00:00:00', 'title' => 'test4', 'balance' => 200.5, 'count' =>  ['min' => 3, 'max' => 6]],
79
            ['id' => 5, 'date' => '2015-04-13 00:00:00', 'title' => 'test5', 'balance' => 150.0, 'count' =>  ['min' => 1, 'max' => 5]],
80
            ['id' => 6, 'date' => '2015-04-14 00:00:00', 'title' => 'test6', 'balance' => 400.8, 'count' =>  ['min' => 1, 'max' => 4]],
81
            ['id' => 7, 'date' => '2015-04-15 00:00:00', 'title' => 'test7', 'balance' => 240.0, 'count' =>  ['min' => 1, 'max' => 4]],
82
            ['id' => 8, 'date' => '2015-04-20 00:00:00', 'title' => 'test8', 'balance' => 760.0, 'count' =>  ['min' => 1, 'max' => 5]],
83
            ['id' => 9, 'date' => '2015-04-20 00:00:00', 'title' => 'test9', 'balance' => 50.0, 'count' =>  ['min' => 1, 'max' => 2]],
84
            ['id' => 10, 'date' => '2015-04-21 00:00:00', 'title' => 'test0', 'balance' => 55.5, 'count' =>  ['min' => 1, 'max' => 2]],
85
        ];
86
    }
87
}
88