Code Duplication    Length = 166-170 lines in 2 locations

tests/Console/Command/AliasCreateCommandTest.php 1 location

@@ 14-179 (lines=166) @@
11
use Generator;
12
use Mockery\MockInterface;
13
14
final class AliasCreateCommandTest extends TestCase
15
{
16
    public function testAliasCreateMustSucceed(): void
17
    {
18
        $this->mock(Client::class, function (MockInterface $mock) {
19
            $mock->shouldReceive('indices')
20
                ->times(2)
21
                ->andReturn(
22
                    $this->mock(IndicesNamespace::class, function (MockInterface $mock) {
23
                        $mock->shouldReceive('exists')
24
                            ->once()
25
                            ->andReturn(true);
26
27
                        $mock->shouldReceive('putAlias')
28
                            ->once()
29
                            ->andReturn([]);
30
                    })
31
                );
32
        });
33
34
        $this->artisan(
35
            'laravel-elasticsearch:utils:alias-create',
36
            [
37
                'index-name' => 'valid_index_name',
38
                'alias-name' => 'valid_alias_name',
39
            ]
40
        )->assertExitCode(0)
41
            ->expectsOutput('Alias valid_alias_name created for index valid_index_name.');
42
    }
43
44
    public function testAliasCreateMustFail(): void
45
    {
46
        $this->mock(Client::class, function (MockInterface $mock) {
47
            $mock->shouldReceive('indices')
48
                ->times(2)
49
                ->andReturn(
50
                    $this->mock(IndicesNamespace::class, function (MockInterface $mock) {
51
                        $mock->shouldReceive('exists')
52
                            ->once()
53
                            ->andReturn(true);
54
55
                        $mock->shouldReceive('putAlias')
56
                            ->once()
57
                            ->andThrow(
58
                                new Exception('error creating alias test exception')
59
                            );
60
                    })
61
                );
62
        });
63
64
        $this->artisan(
65
            'laravel-elasticsearch:utils:alias-create',
66
            [
67
                'index-name' => 'valid_index_name',
68
                'alias-name' => 'valid_alias_name',
69
            ]
70
        )->assertExitCode(1)
71
            ->expectsOutput('Error creating alias valid_alias_name for index valid_index_name, exception message: error creating alias test exception.');
72
    }
73
74
    public function testAliasCreateMustFailBecauseIndexDoesntExists(): void
75
    {
76
        $this->mock(Client::class, function (MockInterface $mock) {
77
            $mock->shouldReceive('indices')
78
                ->once()
79
                ->andReturn(
80
                    $this->mock(IndicesNamespace::class, function (MockInterface $mock) {
81
                        $mock->shouldReceive('exists')
82
                            ->once()
83
                            ->andReturn(false);
84
85
                        $mock->shouldNotReceive('putAlias');
86
                    })
87
                );
88
        });
89
90
        $this->artisan(
91
            'laravel-elasticsearch:utils:alias-create',
92
            [
93
                'index-name' => 'valid_index_name',
94
                'alias-name' => 'valid_alias_name',
95
            ]
96
        )->assertExitCode(1)
97
            ->expectsOutput('Index valid_index_name doesn\'t exists and alias cannot be created.');
98
    }
99
100
    /**
101
     * @dataProvider invalidIndexNameDataProvider
102
     */
103
    public function testArgumentIndexNameAndAliasAreInValid(
104
        $invalidIndexName,
105
        $invalidAliasName,
106
        string $expectedOutputMessage
107
    ): void {
108
        $this->artisan('laravel-elasticsearch:utils:alias-create',
109
            [
110
                'index-name' => $invalidIndexName,
111
                'alias-name' => $invalidAliasName,
112
            ]
113
        )->assertExitCode(1)
114
            ->expectsOutput($expectedOutputMessage);
115
    }
116
117
    public function invalidIndexNameDataProvider(): Generator
118
    {
119
        yield [
120
            null,
121
            'valid_alias_name',
122
            'Argument index-name must be a non empty string.'
123
        ];
124
125
        yield [
126
            '',
127
            'valid_alias_name',
128
            'Argument index-name must be a non empty string.'
129
        ];
130
131
        yield [
132
            true,
133
            'valid_alias_name',
134
            'Argument index-name must be a non empty string.'
135
        ];
136
137
        yield [
138
            1,
139
            'valid_alias_name',
140
            'Argument index-name must be a non empty string.'
141
        ];
142
143
        yield [
144
            [],
145
            'valid_alias_name',
146
            'Argument index-name must be a non empty string.'
147
        ];
148
149
        yield [
150
            'valid_index_name',
151
            null,
152
            'Argument alias-name must be a non empty string.'
153
        ];
154
155
        yield [
156
            'valid_index_name',
157
            '',
158
            'Argument alias-name must be a non empty string.'
159
        ];
160
161
        yield [
162
            'valid_index_name',
163
            true,
164
            'Argument alias-name must be a non empty string.'
165
        ];
166
167
        yield [
168
            'valid_index_name',
169
            1,
170
            'Argument alias-name must be a non empty string.'
171
        ];
172
173
        yield [
174
            'valid_index_name',
175
            [],
176
            'Argument alias-name must be a non empty string.'
177
        ];
178
    }
179
}
180

tests/Console/Command/AliasRemoveIndexCommandTest.php 1 location

@@ 14-183 (lines=170) @@
11
use Generator;
12
use Mockery\MockInterface;
13
14
final class AliasRemoveIndexCommandTest extends TestCase
15
{
16
    public function testAliasRemoveMustSucceed(): void
17
    {
18
        $this->mock(Client::class, function (MockInterface $mock) {
19
            $mock->shouldReceive('indices')
20
                ->times(2)
21
                ->andReturn(
22
                    $this->mock(IndicesNamespace::class, function (MockInterface $mock) {
23
                        $mock->shouldReceive('exists')
24
                            ->once()
25
                            ->andReturn(true);
26
27
                        $mock->shouldReceive('deleteAlias')
28
                            ->once()
29
                            ->andReturn([]);
30
                    })
31
                );
32
        });
33
34
        $this->artisan(
35
            'laravel-elasticsearch:utils:alias-remove-index',
36
            [
37
                'index-name' => 'valid_index_name',
38
                'alias-name' => 'valid_alias_name',
39
            ]
40
        )->assertExitCode(0)
41
            ->expectsOutput('Index valid_index_name removed from alias valid_alias_name.');
42
    }
43
44
    public function testAliasRemoveMustFail(): void
45
    {
46
        $this->mock(Client::class, function (MockInterface $mock) {
47
            $mock->shouldReceive('indices')
48
                ->times(2)
49
                ->andReturn(
50
                    $this->mock(IndicesNamespace::class, function (MockInterface $mock) {
51
                        $mock->shouldReceive('exists')
52
                            ->once()
53
                            ->andReturn(true);
54
55
                        $mock->shouldReceive('deleteAlias')
56
                            ->once()
57
                            ->andThrow(
58
                                new Exception('error removing index from alias exception')
59
                            );
60
                    })
61
                );
62
        });
63
64
        $this->artisan(
65
            'laravel-elasticsearch:utils:alias-remove-index',
66
            [
67
                'index-name' => 'valid_index_name',
68
                'alias-name' => 'valid_alias_name',
69
            ]
70
        )->assertExitCode(1)
71
            ->expectsOutput(
72
                'Error removing index valid_index_name from alias valid_alias_name, exception message: error removing index from alias exception.'
73
            );
74
    }
75
76
    public function testAliasRemoveMustFailBecauseIndexDoesntExists(): void
77
    {
78
        $this->mock(Client::class, function (MockInterface $mock) {
79
            $mock->shouldReceive('indices')
80
                ->once()
81
                ->andReturn(
82
                    $this->mock(IndicesNamespace::class, function (MockInterface $mock) {
83
                        $mock->shouldReceive('exists')
84
                            ->once()
85
                            ->andReturn(false);
86
87
                        $mock->shouldNotReceive('deleteAlias');
88
                    })
89
                );
90
        });
91
92
        $this->artisan(
93
            'laravel-elasticsearch:utils:alias-remove-index',
94
            [
95
                'index-name' => 'valid_index_name',
96
                'alias-name' => 'valid_alias_name',
97
            ]
98
        )->assertExitCode(1)
99
            ->expectsOutput(
100
                'Index valid_index_name doesn\'t exists and cannot be removed from alias.'
101
            );
102
    }
103
104
    /**
105
     * @dataProvider invalidIndexNameDataProvider
106
     */
107
    public function testArgumentIndexNameAndAliasAreInValid(
108
        $invalidIndexName,
109
        $invalidAliasName,
110
        string $expectedOutputMessage
111
    ): void {
112
        $this->artisan('laravel-elasticsearch:utils:alias-remove-index',
113
            [
114
                'index-name' => $invalidIndexName,
115
                'alias-name' => $invalidAliasName,
116
            ]
117
        )->assertExitCode(1)
118
            ->expectsOutput($expectedOutputMessage);
119
    }
120
121
    public function invalidIndexNameDataProvider(): Generator
122
    {
123
        yield [
124
            null,
125
            'valid_alias_name',
126
            'Argument index-name must be a non empty string.'
127
        ];
128
129
        yield [
130
            '',
131
            'valid_alias_name',
132
            'Argument index-name must be a non empty string.'
133
        ];
134
135
        yield [
136
            true,
137
            'valid_alias_name',
138
            'Argument index-name must be a non empty string.'
139
        ];
140
141
        yield [
142
            1,
143
            'valid_alias_name',
144
            'Argument index-name must be a non empty string.'
145
        ];
146
147
        yield [
148
            [],
149
            'valid_alias_name',
150
            'Argument index-name must be a non empty string.'
151
        ];
152
153
        yield [
154
            'valid_index_name',
155
            null,
156
            'Argument alias-name must be a non empty string.'
157
        ];
158
159
        yield [
160
            'valid_index_name',
161
            '',
162
            'Argument alias-name must be a non empty string.'
163
        ];
164
165
        yield [
166
            'valid_index_name',
167
            true,
168
            'Argument alias-name must be a non empty string.'
169
        ];
170
171
        yield [
172
            'valid_index_name',
173
            1,
174
            'Argument alias-name must be a non empty string.'
175
        ];
176
177
        yield [
178
            'valid_index_name',
179
            [],
180
            'Argument alias-name must be a non empty string.'
181
        ];
182
    }
183
}
184