@ -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 ] )
@ -362,9 +366,20 @@ 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 ] )
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 , invite } = UserInviteToken . create_invite ( )
data = %{
data = %{
" nickname " = > " vinny " ,
" nickname " = > " vinny " ,
@ -373,22 +388,21 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
" bio " = > " streamer " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" token " = > tok en . token
" token " = > invi te. token
}
}
{ :ok , user } = TwitterAPI . register_user ( data )
{ :ok , user } = TwitterAPI . register_user ( data )
fetched_user = User . get_by_nickname ( " vinny " )
fetched_user = User . get_by_nickname ( " vinny " )
tok en = Repo . get_by ( UserInviteToken , token : tok en . token )
invi te = Repo . get_by ( UserInviteToken , token : invi te. token )
assert tok en . used == true
assert invi te. used == true
assert UserView . render ( " show.json " , %{ user : user } ) ==
assert UserView . render ( " show.json " , %{ user : user } ) ==
UserView . render ( " show.json " , %{ user : fetched_user } )
UserView . render ( " show.json " , %{ user : fetched_user } )
end
end
@moduletag skip : " needs 'registrations_open: false' in config "
test " returns error on invalid token " do
test " it returns an error if invalid token submitted " do
data = %{
data = %{
" nickname " = > " GrimReaper " ,
" nickname " = > " GrimReaper " ,
" email " = > " death@reapers.afterlife " ,
" email " = > " death@reapers.afterlife " ,
@ -405,10 +419,127 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
refute User . get_by_nickname ( " GrimReaper " )
refute User . get_by_nickname ( " GrimReaper " )
end
end
@moduletag skip : " needs 'registrations_open: false' in config "
test " returns error on expired token " do
test " it returns an error if expired token submitted " do
{ :ok , invite } = UserInviteToken . create_invite ( )
{ :ok , token } = UserInviteToken . create_token ( )
UserInviteToken . update_invite! ( invite , used : true )
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 " = > invite . token
}
{ :error , msg } = TwitterAPI . register_user ( data )
assert msg == " Expired token "
refute User . get_by_nickname ( " GrimReaper " )
end
end
describe " registers with 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
data = %{
" nickname " = > " vinny " ,
" email " = > " pasta@pizza.vs " ,
" fullname " = > " Vinny Vinesauce " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees "
}
check_fn = fn invite ->
data = Map . put ( data , " token " , invite . 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 , invite } = UserInviteToken . create_invite ( %{ expires_at : Date . utc_today ( ) } )
check_fn . ( invite )
invite = Repo . get_by ( UserInviteToken , token : invite . token )
refute invite . used
end
test " returns user on token which expired tomorrow " , %{ check_fn : check_fn } do
{ :ok , invite } = UserInviteToken . create_invite ( %{ expires_at : Date . add ( Date . utc_today ( ) , 1 ) } )
check_fn . ( invite )
invite = Repo . get_by ( UserInviteToken , token : invite . token )
refute invite . used
end
test " returns an error on overdue date " , %{ data : data } do
{ :ok , invite } = UserInviteToken . create_invite ( %{ expires_at : Date . add ( Date . utc_today ( ) , - 1 ) } )
data = Map . put ( data , " token " , invite . token )
{ :error , msg } = TwitterAPI . register_user ( data )
assert msg == " Expired token "
refute User . get_by_nickname ( " vinny " )
invite = Repo . get_by ( UserInviteToken , token : invite . token )
refute invite . used
end
end
describe " registers with reusable 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, after him registration fails " do
{ :ok , invite } = UserInviteToken . create_invite ( %{ max_use : 100 } )
UserInviteToken . update_invite! ( invite , uses : 99 )
data = %{
" nickname " = > " vinny " ,
" email " = > " pasta@pizza.vs " ,
" fullname " = > " Vinny Vinesauce " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" token " = > invite . token
}
{ :ok , user } = TwitterAPI . register_user ( data )
fetched_user = User . get_by_nickname ( " vinny " )
invite = Repo . get_by ( UserInviteToken , token : invite . token )
assert invite . used == true
assert UserView . render ( " show.json " , %{ user : user } ) ==
UserView . render ( " show.json " , %{ user : fetched_user } )
data = %{
data = %{
" nickname " = > " GrimReaper " ,
" nickname " = > " GrimReaper " ,
@ -417,7 +548,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
" bio " = > " Your time has come " ,
" bio " = > " Your time has come " ,
" password " = > " scythe " ,
" password " = > " scythe " ,
" confirm " = > " scythe " ,
" confirm " = > " scythe " ,
" token " = > tok en . token
" token " = > invi te. token
}
}
{ :error , msg } = TwitterAPI . register_user ( data )
{ :error , msg } = TwitterAPI . register_user ( data )
@ -425,6 +556,124 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
assert msg == " Expired token "
assert msg == " Expired token "
refute User . get_by_nickname ( " GrimReaper " )
refute User . get_by_nickname ( " GrimReaper " )
end
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 , invite } = UserInviteToken . create_invite ( %{ expires_at : Date . utc_today ( ) , max_use : 100 } )
data = %{
" nickname " = > " vinny " ,
" email " = > " pasta@pizza.vs " ,
" fullname " = > " Vinny Vinesauce " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" token " = > invite . token
}
{ :ok , user } = TwitterAPI . register_user ( data )
fetched_user = User . get_by_nickname ( " vinny " )
invite = Repo . get_by ( UserInviteToken , token : invite . token )
refute invite . used
assert UserView . render ( " show.json " , %{ user : user } ) ==
UserView . render ( " show.json " , %{ user : fetched_user } )
end
test " error after max uses " do
{ :ok , invite } = UserInviteToken . create_invite ( %{ expires_at : Date . utc_today ( ) , max_use : 100 } )
UserInviteToken . update_invite! ( invite , uses : 99 )
data = %{
" nickname " = > " vinny " ,
" email " = > " pasta@pizza.vs " ,
" fullname " = > " Vinny Vinesauce " ,
" bio " = > " streamer " ,
" password " = > " hiptofbees " ,
" confirm " = > " hiptofbees " ,
" token " = > invite . token
}
{ :ok , user } = TwitterAPI . register_user ( data )
fetched_user = User . get_by_nickname ( " vinny " )
invite = Repo . get_by ( UserInviteToken , token : invite . token )
assert invite . 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 " = > invite . 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 , invite } =
UserInviteToken . create_invite ( %{ expires_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 " = > invite . 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 , invite } =
UserInviteToken . create_invite ( %{ expires_at : Date . add ( Date . utc_today ( ) , - 1 ) , max_use : 100 } )
UserInviteToken . update_invite! ( invite , uses : 100 )
data = %{
" nickname " = > " GrimReaper " ,
" email " = > " death@reapers.afterlife " ,
" fullname " = > " Reaper Grim " ,
" bio " = > " Your time has come " ,
" password " = > " scythe " ,
" confirm " = > " scythe " ,
" token " = > invite . token
}
{ :error , msg } = TwitterAPI . register_user ( data )
assert msg == " Expired token "
refute User . get_by_nickname ( " GrimReaper " )
end
end
test " it returns the error on registration problems " do
test " it returns the error on registration problems " do
data = %{
data = %{