[IMP] document_ftp: improve/sanitize transaction management during tests

Now that spurious commits were removed in document module,
the test would not run properly anymore.
We do need special care with transactions when we test the
FTP layer because operations on the virtual FS are done
in their own transaction, and immediately committed.
In order for test code and FTP operations to be able
to see each other, the transactions need to be synchronized. 
The current test transaction needs to be rolled back
or committed after reach FTP operation so it can "see" the
latest changes in the database. Similarly, we must force
a commit of the test transaction whenever we want the
FTP layer to be able to see its effects.

bzr revid: odo@openerp.com-20111130120244-3m15sxdx1x5x1q1x
This commit is contained in:
Olivier Dony 2011-11-30 13:02:44 +01:00
parent c5c88c43c0
commit 313897186c
2 changed files with 14 additions and 8 deletions

View File

@ -100,11 +100,11 @@
fdata = StringIO('abcd')
ftp.storbinary('STOR test2.txt', fdata)
ftp.close()
cr.commit()
-
I look for the "test2.txt" file at the server
-
!python {model: ir.attachment }: |
cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor)
ids = self.search(cr, uid, [('name', '=', 'test2.txt')])
assert ids, "No test2.txt file found."
-
@ -116,11 +116,11 @@
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
ftp.delete('test2.txt')
ftp.close()
cr.commit()
-
I check at the server that test2.txt is deleted
-
!python {model: ir.attachment }: |
cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor)
ids = self.search(cr, uid, [('name', '=', 'test2.txt')])
assert not ids, "test2.txt file can still be found."
-
@ -133,7 +133,7 @@
fdata = StringIO('abcd')
ftp.storbinary('STOR test2.txt', fdata)
ftp.close()
cr.commit()
cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor)
-
I delete the test2.txt from the server (RPC).
-

View File

@ -4,7 +4,6 @@
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
ftp = te.get_plain_ftp(timeout=1.0)
cr.commit()
- |
I create two partners 'Partner1' and 'Partner2'.
I create three partner categories: 'none', 'pat1' and 'all'
@ -54,7 +53,6 @@
dirs = ftp.nlst()
for dir in [ 'All Partner1+2', 'No partners', 'Pat 1' ]:
assert dir in dirs, "Dir %s not in folder" % dir
cr.commit()
-
I create a 'partners' folder by the first resource one.
-
@ -65,6 +63,8 @@
ressource_type_id: base.model_res_partner
domain: "[('category_id','in',[active_id])]"
ressource_parent_type_id : base.model_res_partner_category
-
I commit (because FTP operations are on different transaction)
-
!python {model: document.directory, id: }: |
cr.commit()
@ -81,7 +81,6 @@
for dir in correct:
res = ftp.nlst(dir+'/Partners of Test')
assert res == correct[dir], "Dir %s falsely contains %s" %(dir, res)
cr.commit()
-
I create an ir.attachment, attached (not related) to Partner1
-
@ -89,6 +88,11 @@
name: File of pat1
res_model: res.partner
res_id: !eval ref("tpartner1")
-
I commit (because FTP operations are on different transaction)
-
!python {model: document.directory, id: }: |
cr.commit()
-
I check that pat1/Partner1 folder has the file.
I check that all/Partner1 folder has the file
@ -109,6 +113,7 @@
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing/Pat 1/Partners of Test/Partner 1')
fdata = StringIO('abcd')
ftp.storbinary('STOR pat1-dynamic.txt', fdata)
cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor)
-
I check at the server that the file is attached to Partner1
-
@ -159,7 +164,8 @@
from cStringIO import StringIO
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing/Pat 1/Partners of Test/Partner 1')
ftp.delete('pat1-dynamic.txt')
ftp.close()
ftp.close()
cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor)
-
I delete the Partners Testing folder, "File of pat1" file, Partner and Partner category.
@ -177,5 +183,5 @@
partner_categ_pool.unlink(cr, uid, [ref('tpat_categ_all')])
partner_pool.unlink(cr, uid, [ref('tpartner1')])
partner_pool.unlink(cr, uid, [ref('tpartner_2')])
cr.commit()
cr.commit() #required because all the operations via FTP were committed