@ -16,6 +16,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
import Pleroma.Factory
import Pleroma.Factory
setup_all do
Tesla.Mock . mock_global ( fn env -> apply ( HttpRequestMock , :request , [ env ] ) end )
:ok
end
test " create a status " do
test " create a status " do
user = insert ( :user )
user = insert ( :user )
mentioned_user = insert ( :user , %{ nickname : " shp " , ap_id : " shp " } )
mentioned_user = insert ( :user , %{ nickname : " shp " , ap_id : " shp " } )
@ -299,7 +304,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
UserView . render ( " show.json " , %{ user : fetched_user } )
UserView . render ( " show.json " , %{ user : fetched_user } )
end
end
@moduletag skip : " needs 'account_activation_required: true' in config "
test " it sends confirmation email if :account_activation_required is specified in instance config " do
test " it sends confirmation email if :account_activation_required is specified in instance config " do
setting = Pleroma.Config . get ( [ :instance , :account_activation_required ] )
setting = Pleroma.Config . get ( [ :instance , :account_activation_required ] )
@ -353,68 +357,327 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
assert user2 . bio == expected_text
assert user2 . bio == expected_text
end
end
@moduletag skip : " needs 'registrations_open: false' in config "
describe " register with one time token " do
test " it registers a new user via invite token and returns the user. " do
setup do
{ :ok , token } = UserInviteToken . create_token ( )
setting = Pleroma.Config . get ( [ :instance , :registrations_open ] )
data = %{
if setting do
" nickname " = > " vinny " ,
Pleroma.Config . put ( [ :instance , :registrations_open ] , false )
" email " = > " pasta@pizza.vs " ,
on_exit ( fn -> Pleroma.Config . put ( [ :instance , :registrations_open ] , setting ) end )
" fullname " = > " Vinny Vinesauce " ,
end
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" token " = > token . token
}
{ :ok , user } = TwitterAPI . register_user ( data )
:ok
end
fetched_user = User . get_by_nickname ( " vinny " )
test " returns user on success " do
token = Repo . get_by ( UserInviteToken , token : token . token )
{ :ok , token } = UserInviteToken . create_token ( )
assert token . used == true
data = %{
" nickname " = > " vinny " ,
" email " = > " pasta@pizza.vs " ,
" fullname " = > " Vinny Vinesauce " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" token " = > token . token
}
assert UserView . render ( " show.json " , %{ user : user } ) ==
{ :ok , user } = TwitterAPI . register_user ( data )
UserView . render ( " show.json " , %{ user : fetched_user } )
fetched_user = User . get_by_nickname ( " vinny " )
token = Repo . get_by ( UserInviteToken , token : token . token )
assert token . used == true
assert UserView . render ( " show.json " , %{ user : user } ) ==
UserView . render ( " show.json " , %{ user : fetched_user } )
end
test " returns error on invalid token " do
data = %{
" nickname " = > " GrimReaper " ,
" email " = > " death@reapers.afterlife " ,
" fullname " = > " Reaper Grim " ,
" bio " = > " Your time has come " ,
" password " = > " scythe " ,
" confirm " = > " scythe " ,
" token " = > " DudeLetMeInImAFairy "
}
{ :error , msg } = TwitterAPI . register_user ( data )
assert msg == " Invalid token "
refute User . get_by_nickname ( " GrimReaper " )
end
test " returns error on expired token " do
{ :ok , token } = UserInviteToken . create_token ( )
UserInviteToken . mark_as_used ( token . token )
data = %{
" nickname " = > " GrimReaper " ,
" email " = > " death@reapers.afterlife " ,
" fullname " = > " Reaper Grim " ,
" bio " = > " Your time has come " ,
" password " = > " scythe " ,
" confirm " = > " scythe " ,
" token " = > token . token
}
{ :error , msg } = TwitterAPI . register_user ( data )
assert msg == " Expired token "
refute User . get_by_nickname ( " GrimReaper " )
end
end
end
@moduletag skip : " needs 'registrations_open: false' in config "
describe " registers with date limited token " do
test " it returns an error if invalid token submitted " do
setup do
data = %{
setting = Pleroma.Config . get ( [ :instance , :registrations_open ] )
" nickname " = > " GrimReaper " ,
" email " = > " death@reapers.afterlife " ,
if setting do
" fullname " = > " Reaper Grim " ,
Pleroma.Config . put ( [ :instance , :registrations_open ] , false )
" bio " = > " Your time has come " ,
on_exit ( fn -> Pleroma.Config . put ( [ :instance , :registrations_open ] , setting ) end )
" password " = > " scythe " ,
end
" confirm " = > " scythe " ,
" token " = > " DudeLetMeInImAFairy "
data = %{
}
" nickname " = > " vinny " ,
" email " = > " pasta@pizza.vs " ,
" fullname " = > " Vinny Vinesauce " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees "
}
check_fn = fn token ->
data = Map . put ( data , " token " , token . token )
{ :ok , user } = TwitterAPI . register_user ( data )
fetched_user = User . get_by_nickname ( " vinny " )
assert UserView . render ( " show.json " , %{ user : user } ) ==
UserView . render ( " show.json " , %{ user : fetched_user } )
end
{ :ok , data : data , check_fn : check_fn }
end
test " returns user on success " , %{ check_fn : check_fn } do
{ :ok , token } = UserInviteToken . create_token ( expire_at : Date . utc_today ( ) )
check_fn . ( token )
token = Repo . get_by ( UserInviteToken , token : token . token )
refute token . used
end
test " returns user on token which expired tomorrow " , %{ check_fn : check_fn } do
{ :ok , token } = UserInviteToken . create_token ( expire_at : Date . add ( Date . utc_today ( ) , 1 ) )
check_fn . ( token )
token = Repo . get_by ( UserInviteToken , token : token . token )
{ :error , msg } = TwitterAPI . register_user ( data )
refute token . used
end
test " returns an error on overdue date " , %{ data : data } do
{ :ok , token } = UserInviteToken . create_token ( expire_at : Date . add ( Date . utc_today ( ) , - 1 ) )
data = Map . put ( data , " token " , token . token )
{ :error , msg } = TwitterAPI . register_user ( data )
assert msg == " Invalid token "
assert msg == " Expired token "
refute User . get_by_nickname ( " GrimReaper " )
refute User . get_by_nickname ( " vinny " )
token = Repo . get_by ( UserInviteToken , token : token . token )
assert token . used == true
end
end
end
@moduletag skip : " needs 'registrations_open: false' in config "
describe " registers with reusable token " do
test " it returns an error if expired token submitted " do
setup do
{ :ok , token } = UserInviteToken . create_token ( )
setting = Pleroma.Config . get ( [ :instance , :registrations_open ] )
UserInviteToken . mark_as_used ( token . token )
data = %{
if setting do
" nickname " = > " GrimReaper " ,
Pleroma.Config . put ( [ :instance , :registrations_open ] , false )
" email " = > " death@reapers.afterlife " ,
on_exit ( fn -> Pleroma.Config . put ( [ :instance , :registrations_open ] , setting ) end )
" fullname " = > " Reaper Grim " ,
end
" bio " = > " Your time has come " ,
" password " = > " scythe " ,
:ok
" confirm " = > " scythe " ,
end
" token " = > token . token
}
test " returns user on success, after him registration fails " do
{ :ok , token } = UserInviteToken . create_token ( max_use : 100 )
Ecto.Changeset . change ( token , uses : 99 ) |> Repo . update! ( )
data = %{
" nickname " = > " vinny " ,
" email " = > " pasta@pizza.vs " ,
" fullname " = > " Vinny Vinesauce " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" token " = > token . token
}
{ :ok , user } = TwitterAPI . register_user ( data )
fetched_user = User . get_by_nickname ( " vinny " )
token = Repo . get_by ( UserInviteToken , token : token . token )
assert token . used == true
assert UserView . render ( " show.json " , %{ user : user } ) ==
UserView . render ( " show.json " , %{ user : fetched_user } )
{ :error , msg } = TwitterAPI . register_user ( data )
data = %{
" nickname " = > " GrimReaper " ,
" email " = > " death@reapers.afterlife " ,
" fullname " = > " Reaper Grim " ,
" bio " = > " Your time has come " ,
" password " = > " scythe " ,
" confirm " = > " scythe " ,
" token " = > token . token
}
assert msg == " Expired token "
{ :error , msg } = TwitterAPI . register_user ( data )
refute User . get_by_nickname ( " GrimReaper " )
assert msg == " Expired token "
refute User . get_by_nickname ( " GrimReaper " )
end
end
describe " registers with reusable date limited token " do
setup do
setting = Pleroma.Config . get ( [ :instance , :registrations_open ] )
if setting do
Pleroma.Config . put ( [ :instance , :registrations_open ] , false )
on_exit ( fn -> Pleroma.Config . put ( [ :instance , :registrations_open ] , setting ) end )
end
:ok
end
test " returns user on success " do
{ :ok , token } =
UserInviteToken . create_token (
expire_at : Date . utc_today ( ) ,
max_use : 100
)
data = %{
" nickname " = > " vinny " ,
" email " = > " pasta@pizza.vs " ,
" fullname " = > " Vinny Vinesauce " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" token " = > token . token
}
{ :ok , user } = TwitterAPI . register_user ( data )
fetched_user = User . get_by_nickname ( " vinny " )
token = Repo . get_by ( UserInviteToken , token : token . token )
refute token . used
assert UserView . render ( " show.json " , %{ user : user } ) ==
UserView . render ( " show.json " , %{ user : fetched_user } )
end
test " error after max uses " do
{ :ok , token } =
UserInviteToken . create_token (
expire_at : Date . utc_today ( ) ,
max_use : 100
)
Ecto.Changeset . change ( token , uses : 99 ) |> Repo . update! ( )
data = %{
" nickname " = > " vinny " ,
" email " = > " pasta@pizza.vs " ,
" fullname " = > " Vinny Vinesauce " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" token " = > token . token
}
{ :ok , user } = TwitterAPI . register_user ( data )
fetched_user = User . get_by_nickname ( " vinny " )
token = Repo . get_by ( UserInviteToken , token : token . token )
assert token . used == true
assert UserView . render ( " show.json " , %{ user : user } ) ==
UserView . render ( " show.json " , %{ user : fetched_user } )
data = %{
" nickname " = > " GrimReaper " ,
" email " = > " death@reapers.afterlife " ,
" fullname " = > " Reaper Grim " ,
" bio " = > " Your time has come " ,
" password " = > " scythe " ,
" confirm " = > " scythe " ,
" token " = > token . token
}
{ :error , msg } = TwitterAPI . register_user ( data )
assert msg == " Expired token "
refute User . get_by_nickname ( " GrimReaper " )
end
test " returns error on overdue date " do
{ :ok , token } =
UserInviteToken . create_token (
expire_at : Date . add ( Date . utc_today ( ) , - 1 ) ,
max_use : 100
)
data = %{
" nickname " = > " GrimReaper " ,
" email " = > " death@reapers.afterlife " ,
" fullname " = > " Reaper Grim " ,
" bio " = > " Your time has come " ,
" password " = > " scythe " ,
" confirm " = > " scythe " ,
" token " = > token . token
}
{ :error , msg } = TwitterAPI . register_user ( data )
assert msg == " Expired token "
refute User . get_by_nickname ( " GrimReaper " )
end
test " returns error on with overdue date and after max " do
{ :ok , token } =
UserInviteToken . create_token (
expire_at : Date . add ( Date . utc_today ( ) , - 1 ) ,
max_use : 100
)
Ecto.Changeset . change ( token , uses : 100 ) |> Repo . update! ( )
data = %{
" nickname " = > " GrimReaper " ,
" email " = > " death@reapers.afterlife " ,
" fullname " = > " Reaper Grim " ,
" bio " = > " Your time has come " ,
" password " = > " scythe " ,
" confirm " = > " scythe " ,
" token " = > token . token
}
{ :error , msg } = TwitterAPI . register_user ( data )
assert msg == " Expired token "
refute User . get_by_nickname ( " GrimReaper " )
end
end
end
test " it returns the error on registration problems " do
test " it returns the error on registration problems " do