diff options
| author | Derf Null <derf@finalrewind.org> | 2023-06-29 20:55:20 +0200 | 
|---|---|---|
| committer | Derf Null <derf@finalrewind.org> | 2023-06-29 20:55:20 +0200 | 
| commit | 915e90a285670529358f22e54b6dc1a0bec03568 (patch) | |
| tree | 76d1f848f4a1615db3add91bcbc7a0e12d7b6003 | |
| parent | 00ee3de6c1fef9df7c999eaefbe3508d59b79f8b (diff) | |
move journey visibility to separate test
| -rw-r--r-- | t/22-transit-visibility.t (renamed from t/22-visibility.t) | 275 | ||||
| -rw-r--r-- | t/23-journey-visibility.t | 461 | 
2 files changed, 461 insertions, 275 deletions
| diff --git a/t/22-visibility.t b/t/22-transit-visibility.t index e61e107..ab94f94 100644 --- a/t/22-visibility.t +++ b/t/22-transit-visibility.t @@ -245,145 +245,6 @@ sub test_intransit_visibility {  	logout();  } -sub test_journey_visibility { -	my %opt = @_; -	my $jid = $opt{journey_id}; - -	if ( $opt{set_default_visibility} ) { -		my %p = %{ $u->get_privacy_by( uid => $opt{uid} ) }; -		$p{default_visibility} = $opt{set_default_visibility}; -		$u->set_privacy( -			uid => $opt{uid}, -			%p -		); -	} - -	if ( $opt{set_visibility} ) { -		$t->app->journeys->update_visibility( -			uid        => $opt{uid}, -			id         => $jid, -			visibility => $opt{set_visibility} -		); -	} - -	my $status  = $t->app->get_user_status( $opt{uid} ); -	my $journey = $t->app->journeys->get_single( -		uid        => $opt{uid}, -		journey_id => $jid -	); -	my $token -	  = q{?token=} -	  . $status->{dep_eva} . q{-} -	  . $journey->{checkin_ts} % 337 . q{-} -	  . $status->{sched_departure}->epoch; - -	my $desc -	  = "journey=$jid vis=$opt{effective_visibility_str} (from $opt{visibility_str})"; - -	is( $status->{visibility},           $opt{visibility},           $desc ); -	is( $status->{visibility_str},       $opt{visibility_str},       $desc ); -	is( $status->{effective_visibility}, $opt{effective_visibility}, $desc ); -	is( $status->{effective_visibility_str}, -		$opt{effective_visibility_str}, $desc ); - -	if ( $opt{public} ) { -		$t->get_ok("/p/test1/j/$jid")->status_is(200) -		  ->content_like(qr{DPN 667}); -	} -	else { -		$t->get_ok("/p/test1/j/$jid")->status_is(404) -		  ->content_like(qr{Zugfahrt nicht gefunden.}); -	} - -	if ( $opt{with_token} ) { -		$t->get_ok("/p/test1/j/$jid$token")->status_is(200) -		  ->content_like(qr{DPN 667}); -	} -	else { -		$t->get_ok("/p/test1/j/$jid$token")->status_is(404) -		  ->content_like(qr{Zugfahrt nicht gefunden.}); -	} - -	login( -		user     => 'test1', -		password => 'password1' -	); - -	# users can see their own status if visibility is >= followrs -	if ( $opt{effective_visibility} >= 60 ) { -		$t->get_ok("/p/test1/j/$jid")->status_is(200) -		  ->content_like(qr{DPN 667}); -	} -	else { -		$t->get_ok("/p/test1/j/$jid")->status_is(404) -		  ->content_like(qr{Zugfahrt nicht gefunden.}); -	} - -	# users can see their own status with token if visibility is >= unlisted -	if ( $opt{effective_visibility} >= 30 ) { -		$t->get_ok("/p/test1/j/$jid$token")->status_is(200) -		  ->content_like(qr{DPN 667}); -	} -	else { -		$t->get_ok("/p/test1/j/$jid$token")->status_is(404) -		  ->content_like(qr{Zugfahrt nicht gefunden.}); -	} - -	logout(); -	login( -		user     => 'test2', -		password => 'password2' -	); - -	# uid2 can see uid1 if visibility is >= followers -	if ( $opt{effective_visibility} >= 60 ) { -		$t->get_ok("/p/test1/j/$jid")->status_is(200) -		  ->content_like(qr{DPN 667}); -	} -	else { -		$t->get_ok("/p/test1/j/$jid")->status_is(404) -		  ->content_like(qr{Zugfahrt nicht gefunden.}); -	} - -	# uid2 can see uid1 with token if visibility is >= unlisted -	if ( $opt{effective_visibility} >= 30 ) { -		$t->get_ok("/p/test1/j/$jid$token")->status_is(200) -		  ->content_like(qr{DPN 667}); -	} -	else { -		$t->get_ok("/p/test1/j/$jid$token")->status_is(404) -		  ->content_like(qr{Zugfahrt nicht gefunden.}); -	} - -	logout(); -	login( -		user     => 'test3', -		password => 'password3' -	); - -	# uid3 can see uid1 if visibility is >= travelynx -	if ( $opt{effective_visibility} >= 80 ) { -		$t->get_ok("/p/test1/j/$jid")->status_is(200) -		  ->content_like(qr{DPN 667}); -	} -	else { -		$t->get_ok("/p/test1/j/$jid")->status_is(404) -		  ->content_like(qr{Zugfahrt nicht gefunden.}); -	} - -	# uid3 can see uid1 with token if visibility is >= unlisted -	if ( $opt{effective_visibility} >= 30 ) { -		$t->get_ok("/p/test1/j/$jid$token")->status_is(200) -		  ->content_like(qr{DPN 667}); -	} -	else { -		$t->get_ok("/p/test1/j/$jid$token")->status_is(404) -		  ->content_like(qr{Zugfahrt nicht gefunden.}); -	} - -	logout(); -} -  my $uid1 = $u->add(  	name     => 'test1',  	email    => 'test1@example.org', @@ -622,141 +483,5 @@ test_intransit_visibility(  	with_token               => 0,  ); -my $db = $t->app->pg->db; -my $tx = $db->begin; - -my $journey = $t->app->in_transit->get( -	uid => $uid1, -	db  => $db, -); -my $jid = $t->app->journeys->add_from_in_transit( -	journey => $journey, -	db      => $db -); -$t->app->in_transit->delete( -	uid => $uid1, -	db  => $db -); -$tx->commit; - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	visibility               => undef, -	visibility_str           => 'default', -	effective_visibility     => 10, -	effective_visibility_str => 'private', -	public                   => 0, -	with_token               => 0, -); - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	set_default_visibility   => 30, -	visibility               => undef, -	visibility_str           => 'default', -	effective_visibility     => 30, -	effective_visibility_str => 'unlisted', -	public                   => 0, -	with_token               => 1, -); - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	set_default_visibility   => 60, -	visibility               => undef, -	visibility_str           => 'default', -	effective_visibility     => 60, -	effective_visibility_str => 'followers', -	public                   => 0, -	with_token               => 1, -); - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	set_default_visibility   => 80, -	visibility               => undef, -	visibility_str           => 'default', -	effective_visibility     => 80, -	effective_visibility_str => 'travelynx', -	public                   => 0, -	with_token               => 1, -); - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	set_default_visibility   => 100, -	visibility               => undef, -	visibility_str           => 'default', -	effective_visibility     => 100, -	effective_visibility_str => 'public', -	public                   => 1, -	with_token               => 1, -); - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	set_visibility           => 'private', -	visibility               => 10, -	visibility_str           => 'private', -	effective_visibility     => 10, -	effective_visibility_str => 'private', -	public                   => 0, -	with_token               => 0, -); - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	set_visibility           => 'unlisted', -	visibility               => 30, -	visibility_str           => 'unlisted', -	effective_visibility     => 30, -	effective_visibility_str => 'unlisted', -	public                   => 0, -	with_token               => 1, -); - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	set_visibility           => 'followers', -	visibility               => 60, -	visibility_str           => 'followers', -	effective_visibility     => 60, -	effective_visibility_str => 'followers', -	public                   => 0, -	with_token               => 1, -); - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	set_visibility           => 'travelynx', -	visibility               => 80, -	visibility_str           => 'travelynx', -	effective_visibility     => 80, -	effective_visibility_str => 'travelynx', -	public                   => 0, -	with_token               => 1, -); - -test_journey_visibility( -	uid                      => $uid1, -	journey_id               => $jid, -	set_visibility           => 'public', -	visibility               => 100, -	visibility_str           => 'public', -	effective_visibility     => 100, -	effective_visibility_str => 'public', -	public                   => 1, -	with_token               => 1, -); -  $t->app->pg->db->query('drop schema travelynx_test_22 cascade');  done_testing(); diff --git a/t/23-journey-visibility.t b/t/23-journey-visibility.t new file mode 100644 index 0000000..d8d74f3 --- /dev/null +++ b/t/23-journey-visibility.t @@ -0,0 +1,461 @@ +#!/usr/bin/env perl + +# Copyright (C) 2023 Birthe Friesel <derf@finalrewind.org> +# +# SPDX-License-Identifier: MIT + +use Mojo::Base -strict; + +# Tests journey entry and statistics + +use Test::More; +use Test::Mojo; + +use DateTime; +use Travel::Status::DE::IRIS::Result; + +# Include application +use FindBin; +require "$FindBin::Bin/../index.pl"; + +my $t = Test::Mojo->new('Travelynx'); + +if ( not $t->app->config->{db} ) { +	plan( skip_all => 'No database configured' ); +} + +$t->app->pg->db->query('drop schema if exists travelynx_test_23 cascade'); +$t->app->pg->db->query('create schema travelynx_test_23'); +$t->app->pg->db->query('set search_path to travelynx_test_23'); +$t->app->pg->on( +	connection => sub { +		my ( $pg, $dbh ) = @_; +		$dbh->do('set search_path to travelynx_test_23'); +	} +); + +$t->app->config->{mail}->{disabled} = 1; + +$ENV{__TRAVELYNX_TEST_MINI_IRIS} = 1; +$t->app->start( 'database', 'migrate' ); + +my $u = $t->app->users; + +sub login { +	my %opt = @_; +	my $csrf_token +	  = $t->ua->get('/login')->res->dom->at('input[name=csrf_token]') +	  ->attr('value'); +	$t->post_ok( +		'/login' => form => { +			csrf_token => $csrf_token, +			user       => $opt{user}, +			password   => $opt{password}, +		} +	); +	$t->status_is(302)->header_is( location => '/' ); +} + +sub logout { +	my $csrf_token +	  = $t->ua->get('/account')->res->dom->at('input[name=csrf_token]') +	  ->attr('value'); +	$t->post_ok( +		'/logout' => form => { +			csrf_token => $csrf_token, +		} +	); +	$t->status_is(302)->header_is( location => '/login' ); +} + +sub test_journey_visibility { +	my %opt = @_; +	my $jid = $opt{journey_id}; + +	if ( $opt{set_default_visibility} ) { +		my %p = %{ $u->get_privacy_by( uid => $opt{uid} ) }; +		$p{default_visibility} = $opt{set_default_visibility}; +		$u->set_privacy( +			uid => $opt{uid}, +			%p +		); +	} + +	if ( $opt{set_visibility} ) { +		$t->app->journeys->update_visibility( +			uid        => $opt{uid}, +			id         => $jid, +			visibility => $opt{set_visibility} +		); +	} + +	my $status  = $t->app->get_user_status( $opt{uid} ); +	my $journey = $t->app->journeys->get_single( +		uid        => $opt{uid}, +		journey_id => $jid +	); +	my $token +	  = q{?token=} +	  . $status->{dep_eva} . q{-} +	  . $journey->{checkin_ts} % 337 . q{-} +	  . $status->{sched_departure}->epoch; + +	my $desc +	  = "journey=$jid vis=$opt{effective_visibility_str} (from $opt{visibility_str})"; + +	is( $status->{visibility},           $opt{visibility},           $desc ); +	is( $status->{visibility_str},       $opt{visibility_str},       $desc ); +	is( $status->{effective_visibility}, $opt{effective_visibility}, $desc ); +	is( $status->{effective_visibility_str}, +		$opt{effective_visibility_str}, $desc ); + +	if ( $opt{public} ) { +		$t->get_ok("/p/test1/j/$jid")->status_is(200) +		  ->content_like(qr{DPN 667}); +	} +	else { +		$t->get_ok("/p/test1/j/$jid")->status_is(404) +		  ->content_like(qr{Zugfahrt nicht gefunden.}); +	} + +	if ( $opt{with_token} ) { +		$t->get_ok("/p/test1/j/$jid$token")->status_is(200) +		  ->content_like(qr{DPN 667}); +	} +	else { +		$t->get_ok("/p/test1/j/$jid$token")->status_is(404) +		  ->content_like(qr{Zugfahrt nicht gefunden.}); +	} + +	login( +		user     => 'test1', +		password => 'password1' +	); + +	# users can see their own status if visibility is >= followrs +	if ( $opt{effective_visibility} >= 60 ) { +		$t->get_ok("/p/test1/j/$jid")->status_is(200) +		  ->content_like(qr{DPN 667}); +	} +	else { +		$t->get_ok("/p/test1/j/$jid")->status_is(404) +		  ->content_like(qr{Zugfahrt nicht gefunden.}); +	} + +	# users can see their own status with token if visibility is >= unlisted +	if ( $opt{effective_visibility} >= 30 ) { +		$t->get_ok("/p/test1/j/$jid$token")->status_is(200) +		  ->content_like(qr{DPN 667}); +	} +	else { +		$t->get_ok("/p/test1/j/$jid$token")->status_is(404) +		  ->content_like(qr{Zugfahrt nicht gefunden.}); +	} + +	logout(); +	login( +		user     => 'test2', +		password => 'password2' +	); + +	# uid2 can see uid1 if visibility is >= followers +	if ( $opt{effective_visibility} >= 60 ) { +		$t->get_ok("/p/test1/j/$jid")->status_is(200) +		  ->content_like(qr{DPN 667}); +	} +	else { +		$t->get_ok("/p/test1/j/$jid")->status_is(404) +		  ->content_like(qr{Zugfahrt nicht gefunden.}); +	} + +	# uid2 can see uid1 with token if visibility is >= unlisted +	if ( $opt{effective_visibility} >= 30 ) { +		$t->get_ok("/p/test1/j/$jid$token")->status_is(200) +		  ->content_like(qr{DPN 667}); +	} +	else { +		$t->get_ok("/p/test1/j/$jid$token")->status_is(404) +		  ->content_like(qr{Zugfahrt nicht gefunden.}); +	} + +	logout(); +	login( +		user     => 'test3', +		password => 'password3' +	); + +	# uid3 can see uid1 if visibility is >= travelynx +	if ( $opt{effective_visibility} >= 80 ) { +		$t->get_ok("/p/test1/j/$jid")->status_is(200) +		  ->content_like(qr{DPN 667}); +	} +	else { +		$t->get_ok("/p/test1/j/$jid")->status_is(404) +		  ->content_like(qr{Zugfahrt nicht gefunden.}); +	} + +	# uid3 can see uid1 with token if visibility is >= unlisted +	if ( $opt{effective_visibility} >= 30 ) { +		$t->get_ok("/p/test1/j/$jid$token")->status_is(200) +		  ->content_like(qr{DPN 667}); +	} +	else { +		$t->get_ok("/p/test1/j/$jid$token")->status_is(404) +		  ->content_like(qr{Zugfahrt nicht gefunden.}); +	} + +	logout(); +} + +my $uid1 = $u->add( +	name     => 'test1', +	email    => 'test1@example.org', +	token    => 'abcd', +	password => 'password1', +); + +my $uid2 = $u->add( +	name     => 'test2', +	email    => 'test2@example.org', +	token    => 'efgh', +	password => 'password2', +); + +my $uid3 = $u->add( +	name     => 'test3', +	email    => 'test3@example.org', +	token    => 'ijkl', +	password => 'password3', +); + +$u->verify_registration_token( +	uid   => $uid1, +	token => 'abcd' +); +$u->verify_registration_token( +	uid   => $uid2, +	token => 'efgh' +); +$u->verify_registration_token( +	uid   => $uid3, +	token => 'ijkl' +); + +$u->set_social( +	uid            => $uid1, +	accept_follows => 1 +); +$u->set_social( +	uid            => $uid2, +	accept_follows => 1 +); +$u->set_social( +	uid            => $uid3, +	accept_follows => 1 +); + +$u->follow( +	uid    => $uid2, +	target => $uid1 +); + +is( +	$u->get_relation( +		subject => $uid2, +		object  => $uid1 +	), +	'follows' +); +is( +	$u->get_relation( +		subject => $uid1, +		object  => $uid2 +	), +	undef +); + +my $dep       = DateTime->now; +my $arr       = $dep->clone->add( hours => 1 ); +my $train_dep = Travel::Status::DE::IRIS::Result->new( +	classes      => 'N', +	type         => 'DPN', +	train_no     => '667', +	raw_id       => '1234-2306251312-1', +	departure_ts => '2306251312', +	platform     => 8, +	station      => 'Aachen Hbf', +	station_uic  => 8000001, +	route_post   => 'Mainz Hbf|Aalen Hbf', +); +my $train_arr = Travel::Status::DE::IRIS::Result->new( +	classes     => 'N', +	type        => 'DPN', +	train_no    => '667', +	raw_id      => '1234-2306251312-3', +	arrival_ts  => '2306252000', +	platform    => 1, +	station     => 'Aalen Hbf', +	station_uic => 8000002, +	route_pre   => 'Aachen Hbf|Mainz Hbf', +); +$t->app->in_transit->add( +	uid           => $uid1, +	departure_eva => 8000001, +	train         => $train_dep, +	route         => [], +); +$t->app->in_transit->set_arrival_eva( +	uid         => $uid1, +	arrival_eva => 8000002, +); + +my $db = $t->app->pg->db; +my $tx = $db->begin; + +my $journey = $t->app->in_transit->get( +	uid => $uid1, +	db  => $db, +); +my $jid = $t->app->journeys->add_from_in_transit( +	journey => $journey, +	db      => $db +); +$t->app->in_transit->delete( +	uid => $uid1, +	db  => $db +); +$tx->commit; + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	visibility               => undef, +	visibility_str           => 'default', +	effective_visibility     => 30, +	effective_visibility_str => 'unlisted', +	public                   => 0, +	with_token               => 1, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_default_visibility   => 10, +	visibility               => undef, +	visibility_str           => 'default', +	effective_visibility     => 10, +	effective_visibility_str => 'private', +	public                   => 0, +	with_token               => 0, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_default_visibility   => 30, +	visibility               => undef, +	visibility_str           => 'default', +	effective_visibility     => 30, +	effective_visibility_str => 'unlisted', +	public                   => 0, +	with_token               => 1, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_default_visibility   => 60, +	visibility               => undef, +	visibility_str           => 'default', +	effective_visibility     => 60, +	effective_visibility_str => 'followers', +	public                   => 0, +	with_token               => 1, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_default_visibility   => 80, +	visibility               => undef, +	visibility_str           => 'default', +	effective_visibility     => 80, +	effective_visibility_str => 'travelynx', +	public                   => 0, +	with_token               => 1, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_default_visibility   => 100, +	visibility               => undef, +	visibility_str           => 'default', +	effective_visibility     => 100, +	effective_visibility_str => 'public', +	public                   => 1, +	with_token               => 1, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_visibility           => 'private', +	visibility               => 10, +	visibility_str           => 'private', +	effective_visibility     => 10, +	effective_visibility_str => 'private', +	public                   => 0, +	with_token               => 0, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_visibility           => 'unlisted', +	visibility               => 30, +	visibility_str           => 'unlisted', +	effective_visibility     => 30, +	effective_visibility_str => 'unlisted', +	public                   => 0, +	with_token               => 1, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_visibility           => 'followers', +	visibility               => 60, +	visibility_str           => 'followers', +	effective_visibility     => 60, +	effective_visibility_str => 'followers', +	public                   => 0, +	with_token               => 1, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_visibility           => 'travelynx', +	visibility               => 80, +	visibility_str           => 'travelynx', +	effective_visibility     => 80, +	effective_visibility_str => 'travelynx', +	public                   => 0, +	with_token               => 1, +); + +test_journey_visibility( +	uid                      => $uid1, +	journey_id               => $jid, +	set_visibility           => 'public', +	visibility               => 100, +	visibility_str           => 'public', +	effective_visibility     => 100, +	effective_visibility_str => 'public', +	public                   => 1, +	with_token               => 1, +); + +$t->app->pg->db->query('drop schema travelynx_test_23 cascade'); +done_testing(); | 
