Skip to content

Commit c19a90b

Browse files
committed
Provide the migration so it can be used in migrations. Fixes #1
1 parent 3a5f896 commit c19a90b

File tree

4 files changed

+187
-207
lines changed

4 files changed

+187
-207
lines changed

README.md

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -26,50 +26,15 @@ Or, install manually by downloading the source files and adding the directory to
2626

2727
## Setup
2828

29-
In order to store the settings in the database, create a new migration from the cli:
29+
In order to store the settings in the database, you can run the provided migration:
3030

3131
```
32-
> php spark make:migration CreateSettingsTable
32+
> php spark migrate --all
3333
```
3434

35-
This creates a new migration at `app/Database/Migrations`. Add the following code to the new file:
36-
37-
```php
38-
<?php
39-
40-
namespace App\Database\Migrations;
41-
42-
use CodeIgniter\Database\Migration;
43-
use Config\Database;
44-
45-
class CreateSettingsTable extends Migration
46-
{
47-
public function up()
48-
{
49-
$this->forge->addField('id');
50-
$this->forge->addField([
51-
'class' => ['type' => 'varchar', 'constraint' => 255],
52-
'key' => ['type' => 'varchar', 'constraint' => 255],
53-
'value' => ['type' => 'text', 'null' => true],
54-
'created_at' => ['type' => 'datetime', 'null' => false],
55-
'updated_at' => ['type' => 'datetime', 'null' => false],
56-
]);
57-
$this->forge->createTable(config('Settings')->database['table'], true);
58-
}
59-
60-
public function down()
61-
{
62-
$this->forge->dropTable(config('Settings')->database['table']);
63-
}
64-
}
65-
66-
```
67-
68-
Run the migration to create the table in the database:
69-
70-
```
71-
> php spark migrate
72-
```
35+
This will also migrate all other packages. If you don't want to do that you can copy the file
36+
from `vendor/codeigniter4/settings/src/Database/Migrations/2021-07-04-041948_CreateSettingsTable.php`
37+
into `app/Database/Migrations`, and migrate without the `--all` flag.
7338

7439
## Usage
7540

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace Sparks\Settings\Database\Migrations;
4+
5+
use CodeIgniter\Database\Migration;
6+
use Config\Database;
7+
8+
class CreateSettingsTable extends Migration
9+
{
10+
public function up()
11+
{
12+
$this->forge->addField('id');
13+
$this->forge->addField([
14+
'class' => [
15+
'type' => 'varchar',
16+
'constraint' => 255,
17+
],
18+
'key' => [
19+
'type' => 'varchar',
20+
'constraint' => 255,
21+
],
22+
'value' => [
23+
'type' => 'text',
24+
'null' => true,
25+
],
26+
'created_at' => [
27+
'type' => 'datetime',
28+
'null' => false,
29+
],
30+
'updated_at' => [
31+
'type' => 'datetime',
32+
'null' => false,
33+
],
34+
]);
35+
$this->forge->createTable(config('Settings')->database['table'], true);
36+
}
37+
38+
public function down()
39+
{
40+
$this->forge->dropTable(config('Settings')->database['table']);
41+
}
42+
}

tests/SettingsTest.php

Lines changed: 140 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -9,148 +9,148 @@
99

1010
class SettingsTest extends TestCase
1111
{
12-
use DatabaseTestTrait;
12+
use DatabaseTestTrait;
1313

14-
protected $namespace = 'Tests\Support';
15-
protected $refresh = true;
16-
protected $table;
14+
protected $namespace = 'Sparks\Settings';
15+
protected $refresh = true;
16+
protected $table;
1717

18-
public function setUp(): void
19-
{
20-
parent::setUp();
18+
public function setUp(): void
19+
{
20+
parent::setUp();
2121

22-
$this->table = config('Settings')->database['table'];
23-
}
22+
$this->table = config('Settings')->database['table'];
23+
}
2424

25-
public function testSettingsGetsFromConfig()
26-
{
27-
$settings = new Settings();
28-
29-
$this->assertEquals(config('Test')->siteName, $settings->get('Test', 'siteName'));
30-
}
31-
32-
public function testSettingsDatabaseNotFound()
33-
{
34-
$settings = new Settings();
35-
36-
$this->assertEquals(config('Test')->siteName, $settings->get('Test', 'siteName'));
37-
}
38-
39-
public function testSetInsertsNewRows()
40-
{
41-
$settings = new Settings();
42-
43-
$results = $settings->set('Test', 'siteName', 'Foo');
44-
45-
$this->assertTrue($results);
46-
$this->seeInDatabase($this->table, [
47-
'class' => 'Tests\Support\Config\Test',
48-
'key' => 'siteName',
49-
'value' => 'Foo'
50-
]);
51-
}
52-
53-
public function testSetInsertsBoolTrue()
54-
{
55-
$settings = new Settings();
56-
57-
$results = $settings->set('Test', 'siteName', true);
58-
59-
$this->assertTrue($results);
60-
$this->seeInDatabase($this->table, [
61-
'class' => 'Tests\Support\Config\Test',
62-
'key' => 'siteName',
63-
'value' => ':true'
64-
]);
65-
66-
$this->assertEquals(true, $settings->get('Test', 'siteName'));
67-
}
68-
69-
public function testSetInsertsBoolFalse()
70-
{
71-
$settings = new Settings();
72-
73-
$results = $settings->set('Test', 'siteName', false);
74-
75-
$this->assertTrue($results);
76-
$this->seeInDatabase($this->table, [
77-
'class' => 'Tests\Support\Config\Test',
78-
'key' => 'siteName',
79-
'value' => ':false'
80-
]);
81-
82-
$this->assertEquals(false, $settings->get('Test', 'siteName'));
83-
}
84-
85-
public function testSetInsertsArray()
86-
{
87-
$settings = new Settings();
88-
$data = ['foo' => 'bar'];
89-
90-
$results = $settings->set('Test', 'siteName', $data);
91-
92-
$this->assertTrue($results);
93-
$this->seeInDatabase($this->table, [
94-
'class' => 'Tests\Support\Config\Test',
95-
'key' => 'siteName',
96-
'value' => serialize($data)
97-
]);
98-
99-
$this->assertEquals($data, $settings->get('Test', 'siteName'));
100-
}
101-
102-
public function testSetInsertsObject()
103-
{
104-
$settings = new Settings();
105-
$data = (object)['foo' => 'bar'];
106-
107-
$results = $settings->set('Test', 'siteName', $data);
108-
109-
$this->assertTrue($results);
110-
$this->seeInDatabase($this->table, [
111-
'class' => 'Tests\Support\Config\Test',
112-
'key' => 'siteName',
113-
'value' => serialize($data)
114-
]);
115-
116-
$this->assertEquals($data, $settings->get('Test', 'siteName'));
117-
}
118-
119-
public function testSetUpdatesExistingRows()
120-
{
121-
$settings = new Settings();
122-
123-
$this->hasInDatabase($this->table, [
124-
'class' => 'Tests\Support\Config\Test',
125-
'key' => 'siteName',
126-
'value' => 'foo',
127-
'created_at' => Time::now()->toDateTimeString(),
128-
'updated_at' => Time::now()->toDateTimeString(),
129-
]);
130-
131-
$results = $settings->set('Test', 'siteName', 'Bar');
132-
133-
$this->assertTrue($results);
134-
$this->seeInDatabase($this->table, [
135-
'class' => 'Tests\Support\Config\Test',
136-
'key' => 'siteName',
137-
'value' => 'Bar'
138-
]);
139-
}
140-
141-
public function testWorksWithoutConfigClass()
142-
{
143-
$settings = new Settings();
144-
145-
$results = $settings->set('Nada', 'siteName', 'Bar');
146-
147-
$this->assertTrue($results);
148-
$this->seeInDatabase($this->table, [
149-
'class' => 'Nada',
150-
'key' => 'siteName',
151-
'value' => 'Bar'
152-
]);
153-
154-
$this->assertEquals('Bar', $settings->get('Nada', 'siteName'));
155-
}
25+
public function testSettingsGetsFromConfig()
26+
{
27+
$settings = new Settings();
28+
29+
$this->assertEquals(config('Test')->siteName, $settings->get('Test', 'siteName'));
30+
}
31+
32+
public function testSettingsDatabaseNotFound()
33+
{
34+
$settings = new Settings();
35+
36+
$this->assertEquals(config('Test')->siteName, $settings->get('Test', 'siteName'));
37+
}
38+
39+
public function testSetInsertsNewRows()
40+
{
41+
$settings = new Settings();
42+
43+
$results = $settings->set('Test', 'siteName', 'Foo');
44+
45+
$this->assertTrue($results);
46+
$this->seeInDatabase($this->table, [
47+
'class' => 'Tests\Support\Config\Test',
48+
'key' => 'siteName',
49+
'value' => 'Foo',
50+
]);
51+
}
52+
53+
public function testSetInsertsBoolTrue()
54+
{
55+
$settings = new Settings();
56+
57+
$results = $settings->set('Test', 'siteName', true);
58+
59+
$this->assertTrue($results);
60+
$this->seeInDatabase($this->table, [
61+
'class' => 'Tests\Support\Config\Test',
62+
'key' => 'siteName',
63+
'value' => ':true',
64+
]);
65+
66+
$this->assertEquals(true, $settings->get('Test', 'siteName'));
67+
}
68+
69+
public function testSetInsertsBoolFalse()
70+
{
71+
$settings = new Settings();
72+
73+
$results = $settings->set('Test', 'siteName', false);
74+
75+
$this->assertTrue($results);
76+
$this->seeInDatabase($this->table, [
77+
'class' => 'Tests\Support\Config\Test',
78+
'key' => 'siteName',
79+
'value' => ':false',
80+
]);
81+
82+
$this->assertEquals(false, $settings->get('Test', 'siteName'));
83+
}
84+
85+
public function testSetInsertsArray()
86+
{
87+
$settings = new Settings();
88+
$data = ['foo' => 'bar'];
89+
90+
$results = $settings->set('Test', 'siteName', $data);
91+
92+
$this->assertTrue($results);
93+
$this->seeInDatabase($this->table, [
94+
'class' => 'Tests\Support\Config\Test',
95+
'key' => 'siteName',
96+
'value' => serialize($data),
97+
]);
98+
99+
$this->assertEquals($data, $settings->get('Test', 'siteName'));
100+
}
101+
102+
public function testSetInsertsObject()
103+
{
104+
$settings = new Settings();
105+
$data = (object)['foo' => 'bar'];
106+
107+
$results = $settings->set('Test', 'siteName', $data);
108+
109+
$this->assertTrue($results);
110+
$this->seeInDatabase($this->table, [
111+
'class' => 'Tests\Support\Config\Test',
112+
'key' => 'siteName',
113+
'value' => serialize($data),
114+
]);
115+
116+
$this->assertEquals($data, $settings->get('Test', 'siteName'));
117+
}
118+
119+
public function testSetUpdatesExistingRows()
120+
{
121+
$settings = new Settings();
122+
123+
$this->hasInDatabase($this->table, [
124+
'class' => 'Tests\Support\Config\Test',
125+
'key' => 'siteName',
126+
'value' => 'foo',
127+
'created_at' => Time::now()->toDateTimeString(),
128+
'updated_at' => Time::now()->toDateTimeString(),
129+
]);
130+
131+
$results = $settings->set('Test', 'siteName', 'Bar');
132+
133+
$this->assertTrue($results);
134+
$this->seeInDatabase($this->table, [
135+
'class' => 'Tests\Support\Config\Test',
136+
'key' => 'siteName',
137+
'value' => 'Bar',
138+
]);
139+
}
140+
141+
public function testWorksWithoutConfigClass()
142+
{
143+
$settings = new Settings();
144+
145+
$results = $settings->set('Nada', 'siteName', 'Bar');
146+
147+
$this->assertTrue($results);
148+
$this->seeInDatabase($this->table, [
149+
'class' => 'Nada',
150+
'key' => 'siteName',
151+
'value' => 'Bar',
152+
]);
153+
154+
$this->assertEquals('Bar', $settings->get('Nada', 'siteName'));
155+
}
156156
}

0 commit comments

Comments
 (0)