2022-08-08 12:31:42 +00:00
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import os , requests
from trytond . tests . test_tryton import ModuleTestCase , with_transaction
from trytond . pool import Pool
from trytond . transaction import Transaction
from trytond . exceptions import UserError
from datetime import date
class LineTestCase ( ModuleTestCase ) :
' Test cashbook line module '
module = ' cashbook '
@with_transaction ( )
def test_line_create_check_names_search ( self ) :
""" create cashbook + line
"""
pool = Pool ( )
Book = pool . get ( ' cashbook.book ' )
Types = pool . get ( ' cashbook.type ' )
Lines = pool . get ( ' cashbook.line ' )
types , = Types . search ( [ ( ' short ' , ' = ' , ' CAS ' ) ] )
book , = Book . create ( [ {
' name ' : ' Book 1 ' ,
' btype ' : types . id ,
' lines ' : [ ( ' create ' , [ {
' date ' : date ( 2022 , 5 , 1 ) ,
' description ' : ' Text 1 ' ,
} , {
' date ' : date ( 2022 , 5 , 2 ) ,
' description ' : ' Text 2 ' ,
} ] ) ] ,
} ] )
self . assertEqual ( book . name , ' Book 1 ' )
self . assertEqual ( book . btype . rec_name , ' CAS - Cash ' )
self . assertEqual ( book . state , ' open ' )
self . assertEqual ( len ( book . lines ) , 2 )
self . assertEqual ( book . lines [ 0 ] . date , date ( 2022 , 5 , 1 ) )
self . assertEqual ( book . lines [ 0 ] . rec_name , ' 05/01/2022 Text 1 ' )
self . assertEqual ( book . lines [ 0 ] . state_cashbook , ' open ' )
self . assertEqual ( book . lines [ 1 ] . date , date ( 2022 , 5 , 2 ) )
self . assertEqual ( book . lines [ 1 ] . rec_name , ' 05/02/2022 Text 2 ' )
self . assertEqual ( Lines . search_count ( [ ( ' rec_name ' , ' = ' , ' Text 1 ' ) ] ) , 1 )
self . assertEqual ( Lines . search_count ( [ ( ' rec_name ' , ' = ' , ' Text 1a ' ) ] ) , 0 )
self . assertEqual ( Lines . search_count ( [ ( ' rec_name ' , ' ilike ' , ' text % ' ) ] ) , 2 )
self . assertEqual ( Lines . search_count ( [ ( ' state_cashbook ' , ' = ' , ' open ' ) ] ) , 2 )
self . assertEqual ( Lines . search_count ( [ ( ' state_cashbook ' , ' = ' , ' closed ' ) ] ) , 0 )
self . assertEqual ( Lines . search_count ( [ ( ' cashbook.state ' , ' = ' , ' open ' ) ] ) , 2 )
self . assertEqual ( Lines . search_count ( [ ( ' cashbook.state ' , ' = ' , ' closed ' ) ] ) , 0 )
@with_transaction ( )
def test_line_delete_with_book_in_open_state ( self ) :
""" create cashbook + line, book in state=open, delete a line
"""
pool = Pool ( )
Book = pool . get ( ' cashbook.book ' )
Types = pool . get ( ' cashbook.type ' )
Lines = pool . get ( ' cashbook.line ' )
types , = Types . search ( [ ( ' short ' , ' = ' , ' CAS ' ) ] )
book , = Book . create ( [ {
' name ' : ' Book 1 ' ,
' btype ' : types . id ,
' lines ' : [ ( ' create ' , [ {
' date ' : date ( 2022 , 5 , 1 ) ,
' description ' : ' Text 1 ' ,
} , {
' date ' : date ( 2022 , 5 , 2 ) ,
' description ' : ' Text 2 ' ,
} ] ) ] ,
} ] )
self . assertEqual ( book . name , ' Book 1 ' )
self . assertEqual ( len ( book . lines ) , 2 )
self . assertEqual ( book . state , ' open ' )
Lines . delete ( [ book . lines [ 0 ] ] )
@with_transaction ( )
def test_line_delete_with_book_in_closed_state ( self ) :
""" create cashbook + line, book in state=closed, delete a line
"""
pool = Pool ( )
Book = pool . get ( ' cashbook.book ' )
Types = pool . get ( ' cashbook.type ' )
Lines = pool . get ( ' cashbook.line ' )
types , = Types . search ( [ ( ' short ' , ' = ' , ' CAS ' ) ] )
book , = Book . create ( [ {
' name ' : ' Book 1 ' ,
' btype ' : types . id ,
' lines ' : [ ( ' create ' , [ {
' date ' : date ( 2022 , 5 , 1 ) ,
' description ' : ' Text 1 ' ,
} , {
' date ' : date ( 2022 , 5 , 2 ) ,
' description ' : ' Text 2 ' ,
} ] ) ] ,
} ] )
self . assertEqual ( book . name , ' Book 1 ' )
self . assertEqual ( len ( book . lines ) , 2 )
self . assertEqual ( book . state , ' open ' )
Book . wfclosed ( [ book ] )
self . assertEqual ( book . state , ' closed ' )
self . assertRaisesRegex ( UserError ,
" The cashbook line ' 05/01/2022 Text 1 ' cannot be deleted because the Cashbook ' Book 1 ' is in state ' Closed ' . " ,
Lines . delete ,
[ book . lines [ 0 ] ] )
@with_transaction ( )
def test_line_delete_with_line_in_check_state ( self ) :
""" create cashbook + line, line in state=check, delete a line
"""
pool = Pool ( )
Book = pool . get ( ' cashbook.book ' )
Types = pool . get ( ' cashbook.type ' )
Lines = pool . get ( ' cashbook.line ' )
types , = Types . search ( [ ( ' short ' , ' = ' , ' CAS ' ) ] )
book , = Book . create ( [ {
' name ' : ' Book 1 ' ,
' btype ' : types . id ,
' lines ' : [ ( ' create ' , [ {
' date ' : date ( 2022 , 5 , 1 ) ,
' description ' : ' Text 1 ' ,
} , {
' date ' : date ( 2022 , 5 , 2 ) ,
' description ' : ' Text 2 ' ,
} ] ) ] ,
} ] )
self . assertEqual ( book . name , ' Book 1 ' )
self . assertEqual ( len ( book . lines ) , 2 )
self . assertEqual ( book . state , ' open ' )
self . assertEqual ( book . lines [ 0 ] . state , ' edit ' )
Lines . wfcheck ( [ book . lines [ 0 ] ] )
self . assertEqual ( book . lines [ 0 ] . state , ' check ' )
self . assertRaisesRegex ( UserError ,
" The cashbook line ' 05/01/2022 Text 1 ' cannot be deleted, its in state ' Checked ' . " ,
Lines . delete ,
[ book . lines [ 0 ] ] )
2022-08-08 15:31:16 +00:00
@with_transaction ( )
def test_line_permission_owner ( self ) :
""" create book+line + 2x users, add users to group, check access
"""
pool = Pool ( )
ResUser = pool . get ( ' res.user ' )
ResGroup = pool . get ( ' res.group ' )
Book = pool . get ( ' cashbook.book ' )
Line = pool . get ( ' cashbook.line ' )
Types = pool . get ( ' cashbook.type ' )
types , = Types . search ( [ ( ' short ' , ' = ' , ' CAS ' ) ] )
grp_cashbook , = ResGroup . search ( [ ( ' name ' , ' = ' , ' Cashbook ' ) ] )
usr_lst = ResUser . create ( [ {
' login ' : ' frida ' ,
' name ' : ' Frida ' ,
' groups ' : [ ( ' add ' , [ grp_cashbook . id ] ) ] ,
} , {
' login ' : ' diego ' ,
' name ' : ' Diego ' ,
' groups ' : [ ( ' add ' , [ grp_cashbook . id ] ) ] ,
} ] )
self . assertEqual ( len ( usr_lst ) , 2 )
self . assertEqual ( usr_lst [ 0 ] . name , ' Frida ' )
self . assertEqual ( usr_lst [ 1 ] . name , ' Diego ' )
book , = Book . create ( [ {
' name ' : ' Fridas book ' ,
' owner ' : usr_lst [ 0 ] . id ,
' btype ' : types . id ,
' lines ' : [ ( ' create ' , [ {
' date ' : date ( 2022 , 5 , 1 ) ,
' description ' : ' Test 1 ' ,
} ] ) ] ,
} ] )
self . assertEqual ( book . rec_name , ' Fridas book ' ) ,
self . assertEqual ( book . owner . rec_name , ' Frida ' ) ,
with Transaction ( ) . set_context ( {
' _check_access ' : True ,
} ) :
# change to user 'diego' , try access
with Transaction ( ) . set_user ( usr_lst [ 1 ] . id ) :
lines = Line . search ( [ ] )
self . assertEqual ( len ( lines ) , 0 )
# change to user 'frida' read/write book
with Transaction ( ) . set_user ( usr_lst [ 0 ] . id ) :
lines = Line . search ( [ ] )
self . assertEqual ( len ( lines ) , 1 )
self . assertEqual ( lines [ 0 ] . cashbook . rec_name , ' Fridas book ' )
self . assertEqual ( lines [ 0 ] . rec_name , ' 05/01/2022 Test 1 ' )
Line . write ( * [
lines ,
{
' description ' : ' Test 2 ' ,
} ] )
self . assertEqual ( lines [ 0 ] . rec_name , ' 05/01/2022 Test 2 ' )
@with_transaction ( )
def test_line_permission_reviewer ( self ) :
""" create book+line + 2x users + 1x reviewer-group, add users to group, check access
"""
pool = Pool ( )
ResUser = pool . get ( ' res.user ' )
ResGroup = pool . get ( ' res.group ' )
Book = pool . get ( ' cashbook.book ' )
Line = pool . get ( ' cashbook.line ' )
Types = pool . get ( ' cashbook.type ' )
types , = Types . search ( [ ( ' short ' , ' = ' , ' CAS ' ) ] )
grp_cashbook , = ResGroup . search ( [ ( ' name ' , ' = ' , ' Cashbook ' ) ] )
grp_reviewer , = ResGroup . create ( [ {
' name ' : ' Cashbook Reviewer ' ,
} ] )
usr_lst = ResUser . create ( [ {
' login ' : ' frida ' ,
' name ' : ' Frida ' ,
' groups ' : [ ( ' add ' , [ grp_cashbook . id ] ) ] ,
} , {
' login ' : ' diego ' ,
' name ' : ' Diego ' ,
' groups ' : [ ( ' add ' , [ grp_cashbook . id , grp_reviewer . id ] ) ] ,
} ] )
self . assertEqual ( len ( usr_lst ) , 2 )
self . assertEqual ( usr_lst [ 0 ] . name , ' Frida ' )
self . assertEqual ( usr_lst [ 1 ] . name , ' Diego ' )
# create cashbook
# add reviewer-group to allow write for users in group
book , = Book . create ( [ {
' name ' : ' Fridas book ' ,
' owner ' : usr_lst [ 0 ] . id ,
' reviewer ' : grp_reviewer . id ,
' btype ' : types . id ,
' lines ' : [ ( ' create ' , [ {
' date ' : date ( 2022 , 5 , 1 ) ,
' description ' : ' Test 1 ' ,
} ] ) ] ,
} ] )
self . assertEqual ( book . rec_name , ' Fridas book ' ) ,
self . assertEqual ( book . owner . rec_name , ' Frida ' ) ,
with Transaction ( ) . set_context ( {
' _check_access ' : True ,
} ) :
# change to user 'diego' , try access
with Transaction ( ) . set_user ( usr_lst [ 1 ] . id ) :
lines = Line . search ( [ ] )
self . assertEqual ( len ( lines ) , 1 )
self . assertEqual ( len ( lines [ 0 ] . cashbook . reviewer . users ) , 1 )
self . assertEqual ( lines [ 0 ] . cashbook . reviewer . users [ 0 ] . rec_name , ' Diego ' )
self . assertEqual ( lines [ 0 ] . rec_name , ' 05/01/2022 Test 1 ' )
Line . write ( * [
lines ,
{
' description ' : ' Test 2 ' ,
} ] )
self . assertEqual ( lines [ 0 ] . rec_name , ' 05/01/2022 Test 2 ' )
# change to user 'frida' read/write line
with Transaction ( ) . set_user ( usr_lst [ 0 ] . id ) :
lines = Line . search ( [ ] )
self . assertEqual ( len ( lines ) , 1 )
self . assertEqual ( lines [ 0 ] . rec_name , ' 05/01/2022 Test 2 ' )
Line . write ( * [
lines ,
{
' description ' : ' Test 3 ' ,
} ] )
self . assertEqual ( lines [ 0 ] . rec_name , ' 05/01/2022 Test 3 ' )
@with_transaction ( )
def test_line_permission_observer ( self ) :
""" create book+line + 2x users + 1x observer-group, add users to group, check access
"""
pool = Pool ( )
ResUser = pool . get ( ' res.user ' )
ResGroup = pool . get ( ' res.group ' )
Book = pool . get ( ' cashbook.book ' )
Line = pool . get ( ' cashbook.line ' )
Types = pool . get ( ' cashbook.type ' )
types , = Types . search ( [ ( ' short ' , ' = ' , ' CAS ' ) ] )
grp_cashbook , = ResGroup . search ( [ ( ' name ' , ' = ' , ' Cashbook ' ) ] )
grp_observer , = ResGroup . create ( [ {
' name ' : ' Cashbook Observer ' ,
} ] )
usr_lst = ResUser . create ( [ {
' login ' : ' frida ' ,
' name ' : ' Frida ' ,
' groups ' : [ ( ' add ' , [ grp_cashbook . id ] ) ] ,
} , {
' login ' : ' diego ' ,
' name ' : ' Diego ' ,
' groups ' : [ ( ' add ' , [ grp_cashbook . id , grp_observer . id ] ) ] ,
} ] )
self . assertEqual ( len ( usr_lst ) , 2 )
self . assertEqual ( usr_lst [ 0 ] . name , ' Frida ' )
self . assertEqual ( usr_lst [ 1 ] . name , ' Diego ' )
# create cashbook
# add reviewer-group to allow write for users in group
book , = Book . create ( [ {
' name ' : ' Fridas book ' ,
' owner ' : usr_lst [ 0 ] . id ,
' observer ' : grp_observer . id ,
' btype ' : types . id ,
' lines ' : [ ( ' create ' , [ {
' date ' : date ( 2022 , 5 , 1 ) ,
' description ' : ' Test 1 ' ,
} ] ) ] ,
} ] )
self . assertEqual ( book . rec_name , ' Fridas book ' ) ,
self . assertEqual ( book . owner . rec_name , ' Frida ' ) ,
with Transaction ( ) . set_context ( {
' _check_access ' : True ,
} ) :
# change to user 'diego' , try access
with Transaction ( ) . set_user ( usr_lst [ 1 ] . id ) :
lines = Line . search ( [ ] )
self . assertEqual ( len ( lines ) , 1 )
self . assertEqual ( len ( lines [ 0 ] . cashbook . observer . users ) , 1 )
self . assertEqual ( lines [ 0 ] . cashbook . observer . users [ 0 ] . rec_name , ' Diego ' )
self . assertEqual ( lines [ 0 ] . rec_name , ' 05/01/2022 Test 1 ' )
self . assertRaisesRegex ( UserError ,
' You are not allowed to write to records " [0-9] { 1,} " of " Cashbook Line " because of at least one of these rules: \n Owners and reviewers: Cashbook line write - ' ,
Line . write ,
* [
lines ,
{
' description ' : ' Test 2 ' ,
} ,
] )
# change to user 'frida' read/write line
with Transaction ( ) . set_user ( usr_lst [ 0 ] . id ) :
lines = Line . search ( [ ] )
self . assertEqual ( len ( lines ) , 1 )
self . assertEqual ( lines [ 0 ] . rec_name , ' 05/01/2022 Test 1 ' )
Line . write ( * [
lines ,
{
' description ' : ' Test 2 ' ,
} ] )
self . assertEqual ( lines [ 0 ] . rec_name , ' 05/01/2022 Test 2 ' )
# end LineTestCase