Galileo

 view release on metacpan or  search on metacpan

t/basic.t  view on Meta::CPAN

  };
  $t->websocket_ok( '/store/page' )
    ->send_ok({ json => $data })
    ->message_ok
    ->json_message_is( { success => true, message => 'Changes saved' } )
    ->finish_ok;

  # see that the changes are reflected
  $t->get_ok('/page/home')
    ->status_is(200)
    ->text_like( h1 => qr'New Home' )
    ->text_like( '#content p' => qr/$text/ )
    ->element_exists_not('title script')
    ->element_exists_not('.page-header script');

  # save page without title (error)
  my $data_notitle = {
    name  => 'notitle',
    title => '',
    html  => '<p>Hmmm no title</p>',
    md    => 'Hmmm no title',
  };
  $t->websocket_ok( '/store/page' )
    ->send_ok({ json => $data_notitle })
    ->message_ok
    ->json_message_is( { success => false, message => 'Not saved! A title is required!' } )
    ->finish_ok;

};

subtest 'New Page' => sub {

  # author request non-existant page => create new page
  $t->get_ok('/page/doesntexist')
    ->status_is(200)
    ->text_like( '#wmd-input' => qr/Hello World/ )
    ->element_exists( '#wmd-preview' );

  # save page
  my $text = 'Today it snowed so ☃ gets a new home';
  my $data = {
    name  => 'snow❄flake',
    title => 'New Home for ☃',
    html  => "<p>$text</p>",
    md    => $text,
  };
  $t->websocket_ok( '/store/page' )
    ->send_ok({ json => $data })
    ->message_ok
    ->json_message_is( { success => true, message => 'Changes saved' } )
    ->finish_ok;

  # see that the changes are reflected
  $t->get_ok('/page/snow❄flake')
    ->status_is(200)
    ->text_is( h1 => 'New Home for ☃' )
    ->text_like( '#content p' => qr/$text/ );

};

subtest 'Edit Main Navigation Menu' => sub {
  my $title = 'About Galileo';

  # check about page is in nav
  $t->get_ok('/admin/menu')
    ->status_is(200)
    ->$trimmed_text_is( 'ul#main > li:nth-of-type(4) > a' => $title )
    ->text_is( '#list-active-pages > #pages-2 > span' => $title );

  # remove about page from list
  my $data = {
    name => 'main',
    list => [],
  };
  $t->websocket_ok('/store/menu')
    ->send_ok({ json => $data })
    ->message_ok
    ->json_message_is( '/success' => true )
    ->json_message_is( '/message' => 'Changes saved' )
    ->json_message_has( '/content' )
    ->finish_ok;

  my @items = Mojo::DOM
    ->new(j($t->message->[1])->{content})
    ->find('#nav_menu li')
    ->map('all_text')
    ->each;
  is_deeply \@items, ['Navigation', 'Home'];

  # check that item is removed
  $t->get_ok('/admin/menu')
    ->status_is(200)
    ->element_exists_not( 'ul#main > li:nth-of-type(3) > a' )
    ->text_is( '#list-inactive-pages > #pages-2 > span' => $title );

  # put about page back
  $data = {
    name => 'main',
    list => ['pages-3', 'pages-2'],
  };
  $t->websocket_ok('/store/menu')
    ->send_ok({ json => $data })
    ->message_ok
    ->json_message_is( '/success' => true )
    ->json_message_is( '/message' => 'Changes saved' )
    ->json_message_has( '/content' )
    ->finish_ok;

  @items = ();
  @items = Mojo::DOM
    ->new(j($t->message->[1])->{content})
    ->find('#nav_menu li')
    ->map('all_text')
    ->map(\&trim)
    ->each;
  is_deeply \@items, ['Navigation', 'Home', 'Syntax', $title];

  # check about page is back in nav (same as first test block)
  $t->get_ok('/admin/menu')
    ->status_is(200)
    ->$trimmed_text_is( 'ul#main > li:nth-of-type(4) > a' => $title )



( run in 0.691 second using v1.01-cache-2.11-cpan-f56aa216473 )