Skip to content

Repository files navigation

NAME

Test::DB - Temporary Testing Databases

ABSTRACT

Temporary Databases for Testing

SYNOPSIS

use Test::DB;
my $tdb = Test::DB->new;
# my $tdbo = $tdb->create(database => 'sqlite');
# my $dbh = $tdbo->dbh;

DESCRIPTION

This package provides a framework for setting up and tearing down temporary databases for testing purposes. This framework requires a user (optionally with password) which has the ability to create new databases and works by creating test-specific databases owned by the user specified. Note: Test databases are not automatically destroyed and should be cleaned up manually by call the destroy method on the database-specific test database object.

process

on create, clone

  • #1

    Establish a connection to the DB using some "initial" database.

     my $tdbo = $tdb->postgres(initial => 'template0');
    
  • #2

    Using the established connection, create the test/temporary database.

     $tdbo->create;
    
  • #3

    Establish a connection to the newly created test/temporary database.

     $tdbo->create->dbh;
    
  • #4

    Make the test database object immutable.

     $tdbo->create->database('example'); # error
    

on destroy

  • #1

    Establish a connection to the DB using the "initial" database.

     # using the created test/temporary database object
    
  • #2

    Using the established connection, drop the test/temporary database.

     $tdbo->destroy;
    

usages

using DBI

  • #1

     my $tdb = Test::DB->new;
    my $dbh = $tdb->sqlite(%options)->dbh;
    

using DBIx::Class

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $schema = DBIx::Class::Schema->connect(
    dsn => $tdbo->dsn,
    username => $tdbo->username,
    password => $tdbo->password,
    );
    

using Mojo::mysql

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->mysql(%options)->create;
    my $mysql = Mojo::mysql->new($tdbo->uri);
    

using Mojo::Pg

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::Pg (with cloning)

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->clone('template0');
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::SQLite

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->sqlite(%options)->create;
    my $sqlite = Mojo::SQLite->new($tdbo->uri);
    

LIBRARIES

This package uses type constraints from:

Types::Standard

METHODS

This package implements the following methods:

clone

clone(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The clone method generates a database based on the type and database template specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • clone example #1

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $tdb->clone(template => 'template0');
    
  • clone example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone;
    
  • clone example #3

     # given: synopsis
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone(database => 'postgres');
    

create

create(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The create method generates a database based on the type specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • create example #1

     # given: synopsis
    $tdb->create;
    
  • create example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'sqlite';
    $tdb->create;
    
  • create example #3

     # given: synopsis
    $tdb->create(database => 'sqlite');
    

mssql

mssql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mssql method builds and returns a Test::DB::Mssql object.

  • mssql example #1

     # given: synopsis
    $tdb->mssql;
    

mysql

mysql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mysql method builds and returns a Test::DB::Mysql object.

  • mysql example #1

     # given: synopsis
    $tdb->mysql;
    

postgres

postgres(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The postgres method builds and returns a Test::DB::Postgres object.

  • postgres example #1

     # given: synopsis
    $tdb->postgres;
    

sqlite

sqlite(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The sqlite method builds and returns a Test::DB::Sqlite object.

  • sqlite example #1

     # given: synopsis
    $tdb->sqlite;
    

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues

About

Temporary Databases for Testing

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - awncorp/test-db: Temporary Databases for Testing · GitHub
Skip to content

Repository files navigation

NAME

Test::DB - Temporary Testing Databases

ABSTRACT

Temporary Databases for Testing

SYNOPSIS

use Test::DB;
my $tdb = Test::DB->new;
# my $tdbo = $tdb->create(database => 'sqlite');
# my $dbh = $tdbo->dbh;

DESCRIPTION

This package provides a framework for setting up and tearing down temporary databases for testing purposes. This framework requires a user (optionally with password) which has the ability to create new databases and works by creating test-specific databases owned by the user specified. Note: Test databases are not automatically destroyed and should be cleaned up manually by call the destroy method on the database-specific test database object.

process

on create, clone

  • #1

    Establish a connection to the DB using some "initial" database.

     my $tdbo = $tdb->postgres(initial => 'template0');
    
  • #2

    Using the established connection, create the test/temporary database.

     $tdbo->create;
    
  • #3

    Establish a connection to the newly created test/temporary database.

     $tdbo->create->dbh;
    
  • #4

    Make the test database object immutable.

     $tdbo->create->database('example'); # error
    

on destroy

  • #1

    Establish a connection to the DB using the "initial" database.

     # using the created test/temporary database object
    
  • #2

    Using the established connection, drop the test/temporary database.

     $tdbo->destroy;
    

usages

using DBI

  • #1

     my $tdb = Test::DB->new;
    my $dbh = $tdb->sqlite(%options)->dbh;
    

using DBIx::Class

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $schema = DBIx::Class::Schema->connect(
    dsn => $tdbo->dsn,
    username => $tdbo->username,
    password => $tdbo->password,
    );
    

using Mojo::mysql

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->mysql(%options)->create;
    my $mysql = Mojo::mysql->new($tdbo->uri);
    

using Mojo::Pg

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::Pg (with cloning)

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->clone('template0');
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::SQLite

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->sqlite(%options)->create;
    my $sqlite = Mojo::SQLite->new($tdbo->uri);
    

LIBRARIES

This package uses type constraints from:

Types::Standard

METHODS

This package implements the following methods:

clone

clone(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The clone method generates a database based on the type and database template specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • clone example #1

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $tdb->clone(template => 'template0');
    
  • clone example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone;
    
  • clone example #3

     # given: synopsis
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone(database => 'postgres');
    

create

create(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The create method generates a database based on the type specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • create example #1

     # given: synopsis
    $tdb->create;
    
  • create example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'sqlite';
    $tdb->create;
    
  • create example #3

     # given: synopsis
    $tdb->create(database => 'sqlite');
    

mssql

mssql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mssql method builds and returns a Test::DB::Mssql object.

  • mssql example #1

     # given: synopsis
    $tdb->mssql;
    

mysql

mysql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mysql method builds and returns a Test::DB::Mysql object.

  • mysql example #1

     # given: synopsis
    $tdb->mysql;
    

postgres

postgres(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The postgres method builds and returns a Test::DB::Postgres object.

  • postgres example #1

     # given: synopsis
    $tdb->postgres;
    

sqlite

sqlite(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The sqlite method builds and returns a Test::DB::Sqlite object.

  • sqlite example #1

     # given: synopsis
    $tdb->sqlite;
    

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues

About

Temporary Databases for Testing

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - awncorp/test-db: Temporary Databases for Testing · GitHub
Skip to content

Repository files navigation

NAME

Test::DB - Temporary Testing Databases

ABSTRACT

Temporary Databases for Testing

SYNOPSIS

use Test::DB;
my $tdb = Test::DB->new;
# my $tdbo = $tdb->create(database => 'sqlite');
# my $dbh = $tdbo->dbh;

DESCRIPTION

This package provides a framework for setting up and tearing down temporary databases for testing purposes. This framework requires a user (optionally with password) which has the ability to create new databases and works by creating test-specific databases owned by the user specified. Note: Test databases are not automatically destroyed and should be cleaned up manually by call the destroy method on the database-specific test database object.

process

on create, clone

  • #1

    Establish a connection to the DB using some "initial" database.

     my $tdbo = $tdb->postgres(initial => 'template0');
    
  • #2

    Using the established connection, create the test/temporary database.

     $tdbo->create;
    
  • #3

    Establish a connection to the newly created test/temporary database.

     $tdbo->create->dbh;
    
  • #4

    Make the test database object immutable.

     $tdbo->create->database('example'); # error
    

on destroy

  • #1

    Establish a connection to the DB using the "initial" database.

     # using the created test/temporary database object
    
  • #2

    Using the established connection, drop the test/temporary database.

     $tdbo->destroy;
    

usages

using DBI

  • #1

     my $tdb = Test::DB->new;
    my $dbh = $tdb->sqlite(%options)->dbh;
    

using DBIx::Class

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $schema = DBIx::Class::Schema->connect(
    dsn => $tdbo->dsn,
    username => $tdbo->username,
    password => $tdbo->password,
    );
    

using Mojo::mysql

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->mysql(%options)->create;
    my $mysql = Mojo::mysql->new($tdbo->uri);
    

using Mojo::Pg

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::Pg (with cloning)

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->clone('template0');
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::SQLite

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->sqlite(%options)->create;
    my $sqlite = Mojo::SQLite->new($tdbo->uri);
    

LIBRARIES

This package uses type constraints from:

Types::Standard

METHODS

This package implements the following methods:

clone

clone(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The clone method generates a database based on the type and database template specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • clone example #1

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $tdb->clone(template => 'template0');
    
  • clone example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone;
    
  • clone example #3

     # given: synopsis
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone(database => 'postgres');
    

create

create(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The create method generates a database based on the type specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • create example #1

     # given: synopsis
    $tdb->create;
    
  • create example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'sqlite';
    $tdb->create;
    
  • create example #3

     # given: synopsis
    $tdb->create(database => 'sqlite');
    

mssql

mssql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mssql method builds and returns a Test::DB::Mssql object.

  • mssql example #1

     # given: synopsis
    $tdb->mssql;
    

mysql

mysql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mysql method builds and returns a Test::DB::Mysql object.

  • mysql example #1

     # given: synopsis
    $tdb->mysql;
    

postgres

postgres(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The postgres method builds and returns a Test::DB::Postgres object.

  • postgres example #1

     # given: synopsis
    $tdb->postgres;
    

sqlite

sqlite(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The sqlite method builds and returns a Test::DB::Sqlite object.

  • sqlite example #1

     # given: synopsis
    $tdb->sqlite;
    

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues

About

Temporary Databases for Testing

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - awncorp/test-db: Temporary Databases for Testing · GitHub
Skip to content

Repository files navigation

NAME

Test::DB - Temporary Testing Databases

ABSTRACT

Temporary Databases for Testing

SYNOPSIS

use Test::DB;
my $tdb = Test::DB->new;
# my $tdbo = $tdb->create(database => 'sqlite');
# my $dbh = $tdbo->dbh;

DESCRIPTION

This package provides a framework for setting up and tearing down temporary databases for testing purposes. This framework requires a user (optionally with password) which has the ability to create new databases and works by creating test-specific databases owned by the user specified. Note: Test databases are not automatically destroyed and should be cleaned up manually by call the destroy method on the database-specific test database object.

process

on create, clone

  • #1

    Establish a connection to the DB using some "initial" database.

     my $tdbo = $tdb->postgres(initial => 'template0');
    
  • #2

    Using the established connection, create the test/temporary database.

     $tdbo->create;
    
  • #3

    Establish a connection to the newly created test/temporary database.

     $tdbo->create->dbh;
    
  • #4

    Make the test database object immutable.

     $tdbo->create->database('example'); # error
    

on destroy

  • #1

    Establish a connection to the DB using the "initial" database.

     # using the created test/temporary database object
    
  • #2

    Using the established connection, drop the test/temporary database.

     $tdbo->destroy;
    

usages

using DBI

  • #1

     my $tdb = Test::DB->new;
    my $dbh = $tdb->sqlite(%options)->dbh;
    

using DBIx::Class

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $schema = DBIx::Class::Schema->connect(
    dsn => $tdbo->dsn,
    username => $tdbo->username,
    password => $tdbo->password,
    );
    

using Mojo::mysql

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->mysql(%options)->create;
    my $mysql = Mojo::mysql->new($tdbo->uri);
    

using Mojo::Pg

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::Pg (with cloning)

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->clone('template0');
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::SQLite

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->sqlite(%options)->create;
    my $sqlite = Mojo::SQLite->new($tdbo->uri);
    

LIBRARIES

This package uses type constraints from:

Types::Standard

METHODS

This package implements the following methods:

clone

clone(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The clone method generates a database based on the type and database template specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • clone example #1

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $tdb->clone(template => 'template0');
    
  • clone example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone;
    
  • clone example #3

     # given: synopsis
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone(database => 'postgres');
    

create

create(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The create method generates a database based on the type specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • create example #1

     # given: synopsis
    $tdb->create;
    
  • create example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'sqlite';
    $tdb->create;
    
  • create example #3

     # given: synopsis
    $tdb->create(database => 'sqlite');
    

mssql

mssql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mssql method builds and returns a Test::DB::Mssql object.

  • mssql example #1

     # given: synopsis
    $tdb->mssql;
    

mysql

mysql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mysql method builds and returns a Test::DB::Mysql object.

  • mysql example #1

     # given: synopsis
    $tdb->mysql;
    

postgres

postgres(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The postgres method builds and returns a Test::DB::Postgres object.

  • postgres example #1

     # given: synopsis
    $tdb->postgres;
    

sqlite

sqlite(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The sqlite method builds and returns a Test::DB::Sqlite object.

  • sqlite example #1

     # given: synopsis
    $tdb->sqlite;
    

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues

About

Temporary Databases for Testing

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - awncorp/test-db: Temporary Databases for Testing · GitHub
Skip to content

Repository files navigation

NAME

Test::DB - Temporary Testing Databases

ABSTRACT

Temporary Databases for Testing

SYNOPSIS

use Test::DB;
my $tdb = Test::DB->new;
# my $tdbo = $tdb->create(database => 'sqlite');
# my $dbh = $tdbo->dbh;

DESCRIPTION

This package provides a framework for setting up and tearing down temporary databases for testing purposes. This framework requires a user (optionally with password) which has the ability to create new databases and works by creating test-specific databases owned by the user specified. Note: Test databases are not automatically destroyed and should be cleaned up manually by call the destroy method on the database-specific test database object.

process

on create, clone

  • #1

    Establish a connection to the DB using some "initial" database.

     my $tdbo = $tdb->postgres(initial => 'template0');
    
  • #2

    Using the established connection, create the test/temporary database.

     $tdbo->create;
    
  • #3

    Establish a connection to the newly created test/temporary database.

     $tdbo->create->dbh;
    
  • #4

    Make the test database object immutable.

     $tdbo->create->database('example'); # error
    

on destroy

  • #1

    Establish a connection to the DB using the "initial" database.

     # using the created test/temporary database object
    
  • #2

    Using the established connection, drop the test/temporary database.

     $tdbo->destroy;
    

usages

using DBI

  • #1

     my $tdb = Test::DB->new;
    my $dbh = $tdb->sqlite(%options)->dbh;
    

using DBIx::Class

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $schema = DBIx::Class::Schema->connect(
    dsn => $tdbo->dsn,
    username => $tdbo->username,
    password => $tdbo->password,
    );
    

using Mojo::mysql

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->mysql(%options)->create;
    my $mysql = Mojo::mysql->new($tdbo->uri);
    

using Mojo::Pg

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::Pg (with cloning)

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->clone('template0');
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::SQLite

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->sqlite(%options)->create;
    my $sqlite = Mojo::SQLite->new($tdbo->uri);
    

LIBRARIES

This package uses type constraints from:

Types::Standard

METHODS

This package implements the following methods:

clone

clone(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The clone method generates a database based on the type and database template specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • clone example #1

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $tdb->clone(template => 'template0');
    
  • clone example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone;
    
  • clone example #3

     # given: synopsis
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone(database => 'postgres');
    

create

create(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The create method generates a database based on the type specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • create example #1

     # given: synopsis
    $tdb->create;
    
  • create example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'sqlite';
    $tdb->create;
    
  • create example #3

     # given: synopsis
    $tdb->create(database => 'sqlite');
    

mssql

mssql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mssql method builds and returns a Test::DB::Mssql object.

  • mssql example #1

     # given: synopsis
    $tdb->mssql;
    

mysql

mysql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mysql method builds and returns a Test::DB::Mysql object.

  • mysql example #1

     # given: synopsis
    $tdb->mysql;
    

postgres

postgres(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The postgres method builds and returns a Test::DB::Postgres object.

  • postgres example #1

     # given: synopsis
    $tdb->postgres;
    

sqlite

sqlite(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The sqlite method builds and returns a Test::DB::Sqlite object.

  • sqlite example #1

     # given: synopsis
    $tdb->sqlite;
    

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues

About

Temporary Databases for Testing

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - awncorp/test-db: Temporary Databases for Testing · GitHub
Skip to content

Repository files navigation

NAME

Test::DB - Temporary Testing Databases

ABSTRACT

Temporary Databases for Testing

SYNOPSIS

use Test::DB;
my $tdb = Test::DB->new;
# my $tdbo = $tdb->create(database => 'sqlite');
# my $dbh = $tdbo->dbh;

DESCRIPTION

This package provides a framework for setting up and tearing down temporary databases for testing purposes. This framework requires a user (optionally with password) which has the ability to create new databases and works by creating test-specific databases owned by the user specified. Note: Test databases are not automatically destroyed and should be cleaned up manually by call the destroy method on the database-specific test database object.

process

on create, clone

  • #1

    Establish a connection to the DB using some "initial" database.

     my $tdbo = $tdb->postgres(initial => 'template0');
    
  • #2

    Using the established connection, create the test/temporary database.

     $tdbo->create;
    
  • #3

    Establish a connection to the newly created test/temporary database.

     $tdbo->create->dbh;
    
  • #4

    Make the test database object immutable.

     $tdbo->create->database('example'); # error
    

on destroy

  • #1

    Establish a connection to the DB using the "initial" database.

     # using the created test/temporary database object
    
  • #2

    Using the established connection, drop the test/temporary database.

     $tdbo->destroy;
    

usages

using DBI

  • #1

     my $tdb = Test::DB->new;
    my $dbh = $tdb->sqlite(%options)->dbh;
    

using DBIx::Class

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $schema = DBIx::Class::Schema->connect(
    dsn => $tdbo->dsn,
    username => $tdbo->username,
    password => $tdbo->password,
    );
    

using Mojo::mysql

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->mysql(%options)->create;
    my $mysql = Mojo::mysql->new($tdbo->uri);
    

using Mojo::Pg

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::Pg (with cloning)

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->clone('template0');
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::SQLite

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->sqlite(%options)->create;
    my $sqlite = Mojo::SQLite->new($tdbo->uri);
    

LIBRARIES

This package uses type constraints from:

Types::Standard

METHODS

This package implements the following methods:

clone

clone(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The clone method generates a database based on the type and database template specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • clone example #1

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $tdb->clone(template => 'template0');
    
  • clone example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone;
    
  • clone example #3

     # given: synopsis
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone(database => 'postgres');
    

create

create(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The create method generates a database based on the type specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • create example #1

     # given: synopsis
    $tdb->create;
    
  • create example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'sqlite';
    $tdb->create;
    
  • create example #3

     # given: synopsis
    $tdb->create(database => 'sqlite');
    

mssql

mssql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mssql method builds and returns a Test::DB::Mssql object.

  • mssql example #1

     # given: synopsis
    $tdb->mssql;
    

mysql

mysql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mysql method builds and returns a Test::DB::Mysql object.

  • mysql example #1

     # given: synopsis
    $tdb->mysql;
    

postgres

postgres(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The postgres method builds and returns a Test::DB::Postgres object.

  • postgres example #1

     # given: synopsis
    $tdb->postgres;
    

sqlite

sqlite(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The sqlite method builds and returns a Test::DB::Sqlite object.

  • sqlite example #1

     # given: synopsis
    $tdb->sqlite;
    

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues

About

Temporary Databases for Testing

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - awncorp/test-db: Temporary Databases for Testing · GitHub
Skip to content

Repository files navigation

NAME

Test::DB - Temporary Testing Databases

ABSTRACT

Temporary Databases for Testing

SYNOPSIS

use Test::DB;
my $tdb = Test::DB->new;
# my $tdbo = $tdb->create(database => 'sqlite');
# my $dbh = $tdbo->dbh;

DESCRIPTION

This package provides a framework for setting up and tearing down temporary databases for testing purposes. This framework requires a user (optionally with password) which has the ability to create new databases and works by creating test-specific databases owned by the user specified. Note: Test databases are not automatically destroyed and should be cleaned up manually by call the destroy method on the database-specific test database object.

process

on create, clone

  • #1

    Establish a connection to the DB using some "initial" database.

     my $tdbo = $tdb->postgres(initial => 'template0');
    
  • #2

    Using the established connection, create the test/temporary database.

     $tdbo->create;
    
  • #3

    Establish a connection to the newly created test/temporary database.

     $tdbo->create->dbh;
    
  • #4

    Make the test database object immutable.

     $tdbo->create->database('example'); # error
    

on destroy

  • #1

    Establish a connection to the DB using the "initial" database.

     # using the created test/temporary database object
    
  • #2

    Using the established connection, drop the test/temporary database.

     $tdbo->destroy;
    

usages

using DBI

  • #1

     my $tdb = Test::DB->new;
    my $dbh = $tdb->sqlite(%options)->dbh;
    

using DBIx::Class

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $schema = DBIx::Class::Schema->connect(
    dsn => $tdbo->dsn,
    username => $tdbo->username,
    password => $tdbo->password,
    );
    

using Mojo::mysql

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->mysql(%options)->create;
    my $mysql = Mojo::mysql->new($tdbo->uri);
    

using Mojo::Pg

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::Pg (with cloning)

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->clone('template0');
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::SQLite

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->sqlite(%options)->create;
    my $sqlite = Mojo::SQLite->new($tdbo->uri);
    

LIBRARIES

This package uses type constraints from:

Types::Standard

METHODS

This package implements the following methods:

clone

clone(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The clone method generates a database based on the type and database template specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • clone example #1

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $tdb->clone(template => 'template0');
    
  • clone example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone;
    
  • clone example #3

     # given: synopsis
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone(database => 'postgres');
    

create

create(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The create method generates a database based on the type specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • create example #1

     # given: synopsis
    $tdb->create;
    
  • create example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'sqlite';
    $tdb->create;
    
  • create example #3

     # given: synopsis
    $tdb->create(database => 'sqlite');
    

mssql

mssql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mssql method builds and returns a Test::DB::Mssql object.

  • mssql example #1

     # given: synopsis
    $tdb->mssql;
    

mysql

mysql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mysql method builds and returns a Test::DB::Mysql object.

  • mysql example #1

     # given: synopsis
    $tdb->mysql;
    

postgres

postgres(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The postgres method builds and returns a Test::DB::Postgres object.

  • postgres example #1

     # given: synopsis
    $tdb->postgres;
    

sqlite

sqlite(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The sqlite method builds and returns a Test::DB::Sqlite object.

  • sqlite example #1

     # given: synopsis
    $tdb->sqlite;
    

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues

About

Temporary Databases for Testing

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - awncorp/test-db: Temporary Databases for Testing · GitHub
Skip to content

Repository files navigation

NAME

Test::DB - Temporary Testing Databases

ABSTRACT

Temporary Databases for Testing

SYNOPSIS

use Test::DB;
my $tdb = Test::DB->new;
# my $tdbo = $tdb->create(database => 'sqlite');
# my $dbh = $tdbo->dbh;

DESCRIPTION

This package provides a framework for setting up and tearing down temporary databases for testing purposes. This framework requires a user (optionally with password) which has the ability to create new databases and works by creating test-specific databases owned by the user specified. Note: Test databases are not automatically destroyed and should be cleaned up manually by call the destroy method on the database-specific test database object.

process

on create, clone

  • #1

    Establish a connection to the DB using some "initial" database.

     my $tdbo = $tdb->postgres(initial => 'template0');
    
  • #2

    Using the established connection, create the test/temporary database.

     $tdbo->create;
    
  • #3

    Establish a connection to the newly created test/temporary database.

     $tdbo->create->dbh;
    
  • #4

    Make the test database object immutable.

     $tdbo->create->database('example'); # error
    

on destroy

  • #1

    Establish a connection to the DB using the "initial" database.

     # using the created test/temporary database object
    
  • #2

    Using the established connection, drop the test/temporary database.

     $tdbo->destroy;
    

usages

using DBI

  • #1

     my $tdb = Test::DB->new;
    my $dbh = $tdb->sqlite(%options)->dbh;
    

using DBIx::Class

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $schema = DBIx::Class::Schema->connect(
    dsn => $tdbo->dsn,
    username => $tdbo->username,
    password => $tdbo->password,
    );
    

using Mojo::mysql

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->mysql(%options)->create;
    my $mysql = Mojo::mysql->new($tdbo->uri);
    

using Mojo::Pg

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->create;
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::Pg (with cloning)

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->postgres(%options)->clone('template0');
    my $postgres = Mojo::Pg->new($tdbo->uri);
    

using Mojo::SQLite

  • #1

     my $tdb = Test::DB->new;
    my $tdbo = $tdb->sqlite(%options)->create;
    my $sqlite = Mojo::SQLite->new($tdbo->uri);
    

LIBRARIES

This package uses type constraints from:

Types::Standard

METHODS

This package implements the following methods:

clone

clone(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The clone method generates a database based on the type and database template specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • clone example #1

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $tdb->clone(template => 'template0');
    
  • clone example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'postgres';
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone;
    
  • clone example #3

     # given: synopsis
    $ENV{TESTDB_TEMPLATE} = 'template0';
    $tdb->clone(database => 'postgres');
    

create

create(Str :$database, Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The create method generates a database based on the type specified and returns a Test::DB::Object with an active connection, dbh and dsn. If the database specified doesn't have a corresponding database driver this method will returned the undefined value. The type of database can be omitted if the TESTDB_DATABASE environment variable is set, if not the type of database must be either sqlite, mysql, mssql or postgres. Any options provided are passed along to the test database object class constructor.

  • create example #1

     # given: synopsis
    $tdb->create;
    
  • create example #2

     # given: synopsis
    $ENV{TESTDB_DATABASE} = 'sqlite';
    $tdb->create;
    
  • create example #3

     # given: synopsis
    $tdb->create(database => 'sqlite');
    

mssql

mssql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mssql method builds and returns a Test::DB::Mssql object.

  • mssql example #1

     # given: synopsis
    $tdb->mssql;
    

mysql

mysql(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The mysql method builds and returns a Test::DB::Mysql object.

  • mysql example #1

     # given: synopsis
    $tdb->mysql;
    

postgres

postgres(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The postgres method builds and returns a Test::DB::Postgres object.

  • postgres example #1

     # given: synopsis
    $tdb->postgres;
    

sqlite

sqlite(Str %options) : Maybe[InstanceOf["Test::DB::Object"]]

The sqlite method builds and returns a Test::DB::Sqlite object.

  • sqlite example #1

     # given: synopsis
    $tdb->sqlite;
    

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues

About

Temporary Databases for Testing

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages