|
@ -6,6 +6,7 @@ |
|
|
declare(strict_types=1); |
|
|
declare(strict_types=1); |
|
|
namespace JKingWeb\Arsse\TestCase\ImportExport; |
|
|
namespace JKingWeb\Arsse\TestCase\ImportExport; |
|
|
|
|
|
|
|
|
|
|
|
use JKingWeb\Arsse\Arsse; |
|
|
use JKingWeb\Arsse\Db\SQLite3\Driver; |
|
|
use JKingWeb\Arsse\Db\SQLite3\Driver; |
|
|
use JKingWeb\Arsse\ImportExport\AbstractImportExport; |
|
|
use JKingWeb\Arsse\ImportExport\AbstractImportExport; |
|
|
use JKingWeb\Arsse\ImportExport\Exception; |
|
|
use JKingWeb\Arsse\ImportExport\Exception; |
|
@ -15,9 +16,20 @@ use JKingWeb\Arsse\Test\Database; |
|
|
class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest { |
|
|
class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest { |
|
|
protected $drv; |
|
|
protected $drv; |
|
|
protected $proc; |
|
|
protected $proc; |
|
|
|
|
|
protected $checkTables = [ |
|
|
|
|
|
'arsse_folders' => ["id", "owner", "parent", "name"], |
|
|
|
|
|
'arsse_feeds' => ['id', 'url'], |
|
|
|
|
|
'arsse_subscriptions' => ["id", "owner", "folder", "feed", "title"], |
|
|
|
|
|
'arsse_tags' => ["id", "owner", "name"], |
|
|
|
|
|
'arsse_tag_members' => ["tag", "subscription", "assigned"], |
|
|
|
|
|
]; |
|
|
|
|
|
|
|
|
public function setUp() { |
|
|
public function setUp() { |
|
|
self::clearData(); |
|
|
self::clearData(); |
|
|
|
|
|
// create a mock user manager |
|
|
|
|
|
Arsse::$user = \Phake::mock(\JKingWeb\Arsse\User::class); |
|
|
|
|
|
\Phake::when(Arsse::$user)->exists->thenReturn(true); |
|
|
|
|
|
\Phake::when(Arsse::$user)->authorize->thenReturn(true); |
|
|
// create a mock Import/Export processor |
|
|
// create a mock Import/Export processor |
|
|
$this->proc = \Phake::partialMock(AbstractImportExport::class); |
|
|
$this->proc = \Phake::partialMock(AbstractImportExport::class); |
|
|
// initialize an SQLite memeory database |
|
|
// initialize an SQLite memeory database |
|
@ -37,6 +49,8 @@ class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest { |
|
|
'password' => 'str', |
|
|
'password' => 'str', |
|
|
], |
|
|
], |
|
|
'rows' => [ |
|
|
'rows' => [ |
|
|
|
|
|
["john.doe@example.com", ""], |
|
|
|
|
|
["jane.doe@example.com", ""], |
|
|
], |
|
|
], |
|
|
], |
|
|
], |
|
|
'arsse_folders' => [ |
|
|
'arsse_folders' => [ |
|
@ -47,6 +61,12 @@ class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest { |
|
|
'name' => "str", |
|
|
'name' => "str", |
|
|
], |
|
|
], |
|
|
'rows' => [ |
|
|
'rows' => [ |
|
|
|
|
|
[1, "john.doe@example.com", null, "Science"], |
|
|
|
|
|
[2, "john.doe@example.com", 1, "Rocketry"], |
|
|
|
|
|
[3, "john.doe@example.com", null, "Politics"], |
|
|
|
|
|
[4, "john.doe@example.com", null, "Photography"], |
|
|
|
|
|
[5, "john.doe@example.com", 3, "Local"], |
|
|
|
|
|
[6, "john.doe@example.com", 3, "National"], |
|
|
], |
|
|
], |
|
|
], |
|
|
], |
|
|
'arsse_feeds' => [ |
|
|
'arsse_feeds' => [ |
|
@ -56,16 +76,29 @@ class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest { |
|
|
'title' => "str", |
|
|
'title' => "str", |
|
|
], |
|
|
], |
|
|
'rows' => [ |
|
|
'rows' => [ |
|
|
|
|
|
[1, "http://localhost:8000/Import/nasa-jpl", "NASA JPL"], |
|
|
|
|
|
[2, "http://localhost:8000/Import/torstar", "Toronto Star"], |
|
|
|
|
|
[3, "http://localhost:8000/Import/ars", "Ars Technica"], |
|
|
|
|
|
[4, "http://localhost:8000/Import/cbc", "CBC News"], |
|
|
|
|
|
[5, "http://localhost:8000/Import/citizen", "Ottawa Citizen"], |
|
|
|
|
|
[6, "http://localhost:8000/Import/eurogamer", "Eurogamer"], |
|
|
], |
|
|
], |
|
|
], |
|
|
], |
|
|
'arsse_subscriptions' => [ |
|
|
'arsse_subscriptions' => [ |
|
|
'columns' => [ |
|
|
'columns' => [ |
|
|
'id' => "int", |
|
|
'id' => "int", |
|
|
'owner' => "str", |
|
|
'owner' => "str", |
|
|
|
|
|
'folder' => "int", |
|
|
'feed' => "int", |
|
|
'feed' => "int", |
|
|
'title' => "str", |
|
|
'title' => "str", |
|
|
], |
|
|
], |
|
|
'rows' => [ |
|
|
'rows' => [ |
|
|
|
|
|
[1, "john.doe@example.com", 2, 1, "NASA JPL"], |
|
|
|
|
|
[2, "john.doe@example.com", 5, 2, "Toronto Star"], |
|
|
|
|
|
[3, "john.doe@example.com", 1, 3, "Ars Technica"], |
|
|
|
|
|
[4, "john.doe@example.com", 6, 4, "CBC News"], |
|
|
|
|
|
[5, "john.doe@example.com", 6, 5, "Ottawa Citizen"], |
|
|
|
|
|
[6, "john.doe@example.com", null, 6, "Eurogamer"], |
|
|
], |
|
|
], |
|
|
], |
|
|
], |
|
|
'arsse_tags' => [ |
|
|
'arsse_tags' => [ |
|
@ -75,6 +108,12 @@ class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest { |
|
|
'name' => "str", |
|
|
'name' => "str", |
|
|
], |
|
|
], |
|
|
'rows' => [ |
|
|
'rows' => [ |
|
|
|
|
|
[1, "john.doe@example.com", "canada"], |
|
|
|
|
|
[2, "john.doe@example.com", "frequent"], |
|
|
|
|
|
[3, "john.doe@example.com", "gaming"], |
|
|
|
|
|
[4, "john.doe@example.com", "news"], |
|
|
|
|
|
[5, "john.doe@example.com", "tech"], |
|
|
|
|
|
[6, "john.doe@example.com", "toronto"], |
|
|
], |
|
|
], |
|
|
], |
|
|
], |
|
|
'arsse_tag_members' => [ |
|
|
'arsse_tag_members' => [ |
|
@ -84,9 +123,22 @@ class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest { |
|
|
'assigned' => "bool", |
|
|
'assigned' => "bool", |
|
|
], |
|
|
], |
|
|
'rows' => [ |
|
|
'rows' => [ |
|
|
|
|
|
[1, 2, 1], |
|
|
|
|
|
[1, 4, 1], |
|
|
|
|
|
[1, 5, 1], |
|
|
|
|
|
[2, 3, 1], |
|
|
|
|
|
[2, 6, 1], |
|
|
|
|
|
[3, 6, 1], |
|
|
|
|
|
[4, 2, 1], |
|
|
|
|
|
[4, 4, 1], |
|
|
|
|
|
[4, 5, 1], |
|
|
|
|
|
[5, 1, 1], |
|
|
|
|
|
[5, 3, 1], |
|
|
|
|
|
[6, 2, 1], |
|
|
], |
|
|
], |
|
|
], |
|
|
], |
|
|
]; |
|
|
]; |
|
|
|
|
|
$this->primeDatabase($this->drv, $this->data); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public function tearDown() { |
|
|
public function tearDown() { |
|
@ -94,4 +146,28 @@ class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest { |
|
|
$this->proc = null; |
|
|
$this->proc = null; |
|
|
self::clearData(); |
|
|
self::clearData(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public function testMakeNoEffectiveChnages() { |
|
|
|
|
|
$in = [[ |
|
|
|
|
|
['url' => "http://localhost:8000/Import/nasa-jpl", 'title' => "NASA JPL", 'folder' => 3, 'tags' => ["tech"]], |
|
|
|
|
|
['url' => "http://localhost:8000/Import/ars", 'title' => "Ars Technica", 'folder' => 2, 'tags' => ["frequent", "tech"]], |
|
|
|
|
|
['url' => "http://localhost:8000/Import/torstar", 'title' => "Toronto Star", 'folder' => 5, 'tags' => ["news", "canada", "toronto"]], |
|
|
|
|
|
['url' => "http://localhost:8000/Import/citizen", 'title' => "Ottawa Citizen", 'folder' => 6, 'tags' => ["news", "canada"]], |
|
|
|
|
|
['url' => "http://localhost:8000/Import/eurogamer", 'title' => "Eurogamer", 'folder' => 0, 'tags' => ["gaming", "frequent"]], |
|
|
|
|
|
['url' => "http://localhost:8000/Import/cbc", 'title' => "CBC News", 'folder' => 6, 'tags' => ["news", "canada"]], |
|
|
|
|
|
], [1 => |
|
|
|
|
|
['id' => 1, 'name' => "Photography", 'parent' => 0], |
|
|
|
|
|
['id' => 2, 'name' => "Science", 'parent' => 0], |
|
|
|
|
|
['id' => 3, 'name' => "Rocketry", 'parent' => 2], |
|
|
|
|
|
['id' => 4, 'name' => "Politics", 'parent' => 0], |
|
|
|
|
|
['id' => 5, 'name' => "Local", 'parent' => 4], |
|
|
|
|
|
['id' => 6, 'name' => "National", 'parent' => 4], |
|
|
|
|
|
]]; |
|
|
|
|
|
\Phake::when($this->proc)->parse->thenReturn($in); |
|
|
|
|
|
$exp = $this->primeExpectations($this->data, $this->checkTables); |
|
|
|
|
|
$this->proc->import("john.doe@example.com", "", false, false); |
|
|
|
|
|
$this->compareExpectations($this->drv, $exp); |
|
|
|
|
|
$this->proc->import("john.doe@example.com", "", false, true); |
|
|
|
|
|
$this->compareExpectations($this->drv, $exp); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|