author | Aurelien Campeas <aurelien.campeas@logilab.fr> |
Mon, 12 Oct 2009 17:11:21 +0200 | |
branch | stable |
changeset 3644 | b5a8ba388494 |
parent 2953 | e5bdf98be37f |
permissions | -rw-r--r-- |
1714
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
1 |
.. -*- coding: utf-8 -*- |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
2 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
3 |
Tests |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
4 |
===== |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
5 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
6 |
.. toctree:: |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
7 |
:maxdepth: 1 |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
8 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
9 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
10 |
Unit tests |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
11 |
---------- |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
12 |
|
2175
16d3c37c5d28
[doc] improvements
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
2172
diff
changeset
|
13 |
*CubicWeb* framework provides essentially two Python test classes in the |
1714
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
14 |
module `cubicweb.devtools.apptest`: |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
15 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
16 |
* `EnvBasedTC`, to simulate a complete environment (web + repository) |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
17 |
* `RepositoryBasedTC`, to simulate a repository environment only |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
18 |
|
2953
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
19 |
Those two classes almost have the same interface and offer numerous |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
20 |
methods to write tests rapidly and efficiently. |
1714
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
21 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
22 |
XXX FILLME describe API |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
23 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
24 |
In most of the cases, you will inherit `EnvBasedTC` to write Unittest or |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
25 |
functional tests for your entities, views, hooks, etc... |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
26 |
|
2953
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
27 |
Managing connections or users |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
28 |
+++++++++++++++++++++++++++++ |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
29 |
|
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
30 |
Since unit tests are done with the SQLITE backend and this does not |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
31 |
support multiple connections at a time, you must be careful when |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
32 |
simulating security, changing users. |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
33 |
|
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
34 |
By default, tests run with a user with admin privileges. This |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
35 |
user/connection must never be closed. |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
36 |
qwq |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
37 |
Before a self.login, one has to release the connection pool in use with a self.commit, self.rollback or self.close. |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
38 |
|
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
39 |
When one is logged in as a normal user and wants to switch back to the admin user, one has to use self.restore_connection(). |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
40 |
|
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
41 |
Usually it looks like this: |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
42 |
|
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
43 |
.. sourcecode:: python |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
44 |
|
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
45 |
# execute using default admin connection |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
46 |
self.execute(...) |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
47 |
# I want to login with another user, ensure to free admin connection pool |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
48 |
# (could have used rollback but not close here, we should never close defaut admin connection) |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
49 |
self.commit() |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
50 |
cnx = self.login('user') |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
51 |
# execute using user connection |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
52 |
self.execute(...) |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
53 |
# I want to login with another user or with admin user |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
54 |
self.commit(); cnx.close() |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
55 |
# restore admin connection, never use cnx = self.login('admin'), it will return |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
56 |
# the default admin connection and one may be tempted to close it |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
57 |
self.restore_connection() |
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
58 |
|
3644
b5a8ba388494
stronger wording
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2953
diff
changeset
|
59 |
Do not use the references kept to the entities created with a connection from another. |
2953
e5bdf98be37f
[doc] important note about tests and connections/users
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
2175
diff
changeset
|
60 |
|
1714
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
61 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
62 |
Email notifications tests |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
63 |
------------------------- |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
64 |
When running tests potentially generated e-mails are not really |
2172
cf8f9180e63e
delete-trailing-whitespace
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1714
diff
changeset
|
65 |
sent but is found in the list `MAILBOX` of module `cubicweb.devtools.apptest`. |
1714
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
66 |
This list is reset at each test *setUp* (by the setUp of classes `EnvBasedTC` |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
67 |
and `RepositoryBasedTC`). |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
68 |
|
2172
cf8f9180e63e
delete-trailing-whitespace
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
1714
diff
changeset
|
69 |
|
1714
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
70 |
You can test your notifications by analyzing the contents of this list, which |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
71 |
contains objects with two attributes: |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
72 |
* `recipients`, the list of recipients |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
73 |
* `msg`, object email.Message |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
74 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
75 |
|
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
76 |
Automatic testing |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
77 |
----------------- |
a721966779be
new book layout, do not compile yet
sylvain.thenault@logilab.fr
parents:
diff
changeset
|
78 |
XXXFILLME |