SqliteTest.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace fphammerle\yii2\auth\clientcert\tests;
  3. use \yii\db\Connection;
  4. class SqliteTest extends TestCase
  5. {
  6. public function createConnection($persistent)
  7. {
  8. return new Connection([
  9. 'dsn' => 'sqlite::memory:',
  10. 'attributes' => [
  11. \PDO::ATTR_PERSISTENT => $persistent,
  12. ],
  13. ]);
  14. }
  15. public function getTableNames(Connection $db)
  16. {
  17. return array_map(
  18. function($tbl) { return $tbl['name']; },
  19. $db->createCommand('SELECT name FROM sqlite_master')->queryAll()
  20. );
  21. }
  22. public function testPersistence()
  23. {
  24. $a = $this->createConnection(false);
  25. $this->assertEquals([], $this->getTableNames($a));
  26. $a->createCommand('CREATE TABLE a (aa INT)')->execute();
  27. $this->assertEquals(['a'], $this->getTableNames($a));
  28. $b = $this->createConnection(false);
  29. $this->assertEquals([], $this->getTableNames($b));
  30. $b->createCommand('CREATE TABLE b (bb INT)')->execute();
  31. $this->assertEquals(['a'], $this->getTableNames($a));
  32. $this->assertEquals(['b'], $this->getTableNames($b));
  33. $c = $this->createConnection(true);
  34. $this->assertEquals([], $this->getTableNames($c));
  35. $c->createCommand('CREATE TABLE c (cc INT)')->execute();
  36. $this->assertEquals(['b'], $this->getTableNames($b));
  37. $this->assertEquals(['c'], $this->getTableNames($c));
  38. $d = $this->createConnection(false);
  39. $this->assertEquals([], $this->getTableNames($d));
  40. $e = $this->createConnection(true);
  41. $this->assertEquals(['c'], $this->getTableNames($e));
  42. $e->createCommand('CREATE TABLE e (ee INT)')->execute();
  43. $this->assertEquals(['c', 'e'], $this->getTableNames($c));
  44. $this->assertEquals([], $this->getTableNames($d));
  45. $this->assertEquals(['c', 'e'], $this->getTableNames($e));
  46. }
  47. public function testCopyConnection()
  48. {
  49. $a = $this->mockApplication();
  50. $default_tables = $this->getTableNames($a->db);
  51. $a->db->createCommand('CREATE TABLE a (aa INT)')->execute();
  52. $this->assertEquals(
  53. array_merge($default_tables, ['a']),
  54. $this->getTableNames($a->db)
  55. );
  56. $b = $this->mockApplication();
  57. $this->assertEquals($default_tables, $this->getTableNames($b->db));
  58. $c = $this->mockApplication([
  59. 'components' => [
  60. 'db' => $a->db,
  61. ],
  62. ]);
  63. $this->assertEquals(
  64. array_merge($default_tables, ['a']),
  65. $this->getTableNames($c->db)
  66. );
  67. $c->db->createCommand('CREATE TABLE c (cc INT)')->execute();
  68. $this->assertEquals(
  69. array_merge($default_tables, ['a', 'c']),
  70. $this->getTableNames($c->db)
  71. );
  72. $this->assertEquals(
  73. $this->getTableNames($c->db),
  74. $this->getTableNames($a->db)
  75. );
  76. $this->assertEquals(
  77. $default_tables,
  78. $this->getTableNames($b->db)
  79. );
  80. }
  81. }