App-DrivePlayer

 view release on metacpan or  search on metacpan

t/unit/Test/DrivePlayer/Player.pm  view on Meta::CPAN

package Test::DrivePlayer::Player;

use strict;
use warnings;

use Module::Load qw( load );
use POSIX   qw( :sys_wait_h );
use Test::Most;
use Test::DrivePlayer::TestBase;
use Test::DrivePlayer::Utils qw( :all );
use Time::HiRes qw( time );

use parent 'Test::DrivePlayer::TestBase';

sub setup : Tests(setup) {
    my ($self) = @_;
    $self->SUPER::setup();
    load('App::DrivePlayer::Player');
    return;
}

# Most Player tests mock the mpv process and IPC socket so we can test
# state management and protocol logic without spawning a real mpv.

# ---- Constructor ----

sub constructor : Tests(3) {
    my ($self) = @_;

    my $p = fake_player();
    isa_ok $p, 'App::DrivePlayer::Player', 'constructor returns Player';
    is $p->state, 'stop', 'initial state is stop';
    is $p->current_track, undef, 'no current track initially';
}

sub constructor_requires_auth : Tests(1) {
    my ($self) = @_;

    throws_ok { App::DrivePlayer::Player->new() }
        qr/required/i,
        'constructor requires auth';
}

sub constructor_callbacks_optional : Tests(1) {
    my ($self) = @_;

    lives_ok {
        App::DrivePlayer::Player->new(auth => fake_auth())
    } 'constructor without callbacks lives';
}

# ---- Token management ----

sub bearer_token_initial_fetch : Tests(2) {
    my ($self) = @_;

    my $p = fake_player(token => 'Bearer mytoken123');
    my $tok = $p->_bearer_token();
    is $tok, 'Bearer mytoken123', 'bearer token fetched from auth';
    ok $p->_token_time > 0,       'token_time set after fetch';
}

sub bearer_token_cached : Tests(2) {
    my ($self) = @_;

    my $call_count = 0;
    my $auth = fake_auth(token => 'Bearer cached_token');

    $self->_mock('auth_headers', 'Test::DrivePlayer::MockAuth', 'headers', sub {
        $call_count++;
        return ['Authorization', 'Bearer cached_token'];
    });

    my $p = App::DrivePlayer::Player->new(auth => $auth);
    $p->_bearer_token();
    $p->_bearer_token();



( run in 0.769 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )