1#!/usr/bin/env perl
2use strict;
3use warnings;
4use Test::Most;
5use Test::Deep qw/blessed/;
6use t::Test;
7use DBIx::NoSQLite;
8
9my ( $store, $store_file, $model, $result );
10$store_file = t::Test->tmp_sqlite;
11#$store_file = t::Test->test_sqlite( remove => 1 );
12
13$store = DBIx::NoSQLite->connect( $store_file );
14ok( $store );
15
16ok( ! $store->exists( 'Artist' => 'Smashing Pumpkins' ) );
17
18$store->set( 'Artist' => 'Smashing Pumpkins' => {
19    name => 'Smashing Pumpkins',
20    genre => 'rock',
21    website => 'smashingpumpkins.com',
22} );
23
24ok( $store->exists( 'Artist' => 'Smashing Pumpkins' ) );
25
26$store->set( 'Artist' => 'Tool' => {
27    name => 'Tool',
28    genre => 'rock',
29} );
30
31is( $store->search( 'Artist' )->count, 2 );
32
33my $artist = $store->get( 'Artist' => 'Smashing Pumpkins' );
34cmp_deeply( $artist, {
35    name => 'Smashing Pumpkins',
36    genre => 'rock',
37    website => 'smashingpumpkins.com',
38} );
39
40$store->model( 'Artist' )->index( 'name' );
41$store->model( 'Artist' )->reindex;
42
43cmp_deeply( [ $store->search( 'Artist' )->order_by( 'name DESC' )->all ], [
44    {
45        name => 'Tool',
46        genre => 'rock',
47    },
48    {
49        name => 'Smashing Pumpkins',
50        genre => 'rock',
51        website => 'smashingpumpkins.com',
52    },
53] );
54
55SKIP: {
56    skip "DateTime required for this test", 1 unless eval { require DateTime };
57
58    $store->model( 'Album' )->index( 'released' => ( isa => 'DateTime' ) );
59
60    $store->set( 'Album' => 'Siamese Dream' => {
61        artist => 'Smashing Pumpkins',
62        released => DateTime->new( year => 1993, month => 1, day => 1, hour => 0, minute => 0, second => 0 ),
63    } );
64
65    my $album = $store->get( 'Album' => 'Siamese Dream' );
66    my $released = $album->{ released };
67
68    is ref($released) => 'DateTime';
69    is( $released->year, 1993 );
70    is( $released->day, 1 );
71}
72
73done_testing;
74