App-OATH

 view release on metacpan or  search on metacpan

t/001-test.t  view on Meta::CPAN

};

subtest 'Key sort and length' => sub {
  $app->{'password'} = 'secret';
  delete $app->{'search'};
  $app->set_filename( $filename2 );
  $app->init();

  my @a;

  @a = trap{ $app->add_entry( 'alice:JBSWY3DPEHPK3PXP' ); };
  is( $trap->exit, undef, 'New key succeeds' );
  is( $trap->stdout, "Adding OTP for alice\n", 'Gives success message' );

  @a = trap{ $app->add_entry( 'bob:JBSWY3DPEHPK3PXP' ); };
  is( $trap->exit, undef, 'New key succeeds' );
  is( $trap->stdout, "Adding OTP for bob\n", 'Gives success message' );

  @a = trap{ $app->add_entry( 'catriona:JBSWY3DPEHPK3PXP' ); };
  is( $trap->exit, undef, 'New key succeeds' );
  is( $trap->stdout, "Adding OTP for catriona\n", 'Gives success message' );

  my $timestamp = 48058835;

  my $newapp = Test::MockObject::Extends->new( $app );
  isa_ok( $newapp, 'T::MO::E::e' );
  $newapp->mock( 'get_counter', sub{ return 48058835; } );
  my $counter = $newapp->get_counter();
  is( $counter, $timestamp, 'Mocked get counter' );

  @a = trap{ $app->display_codes() };
  my $expected = "\n   alice : 205414\n     bob : 205414\ncatriona : 205414\n\n";
  is( $trap->stdout, $expected, 'Shows correct codes properly sorted and justified' );

  $app->set_raw();
  @a = trap{ $app->display_codes() };
  my $expected = "\n   alice : JBSWY3DPEHPK3PXP\n     bob : JBSWY3DPEHPK3PXP\ncatriona : JBSWY3DPEHPK3PXP\n\n";
  is( $trap->stdout, $expected, 'Shows correct raw codes properly sorted and justified' );
  delete $app->{'raw'};

  open my $inf,'<','t/qr.out';
  my @expected_qr = <$inf>;
  close $inf;

  $app->set_rawqr();
  @a = trap{ $app->display_codes() };
  $expected = join( q{}, @expected_qr );
  # Test failing on travis, producing different QR code
  # ToDo - Fix this
  #is( $trap->stdout, $expected, 'Shows correct raw qr codes properly sorted and justified' );
  delete $app->{'rawqr'};

  $app->set_filename( $filename );

};

subtest 'Locking' => sub {
    my $lock1 = $app->get_lock();
    is( $lock1, 1, 'Could lock' );
    my $lock2 = $app->get_lock();
    is( $lock2, 0, 'Already locked' );
    $app->set_filename( $filename2 );
    my $lock3 = $app->get_lock();
    is( $lock3, 1, 'Could lock after file change' );
    my $lock4 = $app->get_lock();
    is( $lock4, 0, 'Already locked' );
    $app->set_filename( $filename2 );
    my $lock5 = $app->get_lock();
    is( $lock5, 0, 'Still locked after false name change' );
    $app->drop_lock();
};

subtest 'Invalid Filename' => sub {
    my $invalid_filename = $filename . '/invalid';
    $app->set_filename( $invalid_filename );
    dies_ok( sub{ $app->save_data(); }, 'Dies on invalid filename save' );
    $app->set_filename( $filename );
};

subtest 'Pod Coverage' => sub {
    pod_coverage_ok( 'App::OATH' );
    pod_coverage_ok( 'App::OATH::Crypt' );
    pod_coverage_ok( 'App::OATH::Crypt::Rijndael' );
    pod_coverage_ok( 'App::OATH::Crypt::CBC' );
};

#subtest 'Coverage' => sub {
#    ok_test_coverage( 'App::OATH' );
#    ok_test_coverage( 'App::OATH::Crypt' );
#    ok_test_coverage( 'App::OATH::Crypt::CBC' );
#    ok_test_coverage( 'App::OATH::Crypt::Rijndael' );
#};

done_testing();



( run in 0.560 second using v1.01-cache-2.11-cpan-98e64b0badf )