MERGE branches/concurrency 108301:108557 into trunk
[lhc/web/wiklou.git] / tests / phpunit / includes / api / ApiConcurrencyTest.php
1 <?php
2
3 class ApiConcurrencyTest extends ApiTestCase {
4 /**
5 * @var Array of test users
6 */
7 public static $users;
8
9 // Prepare test environment
10
11 function setUp() {
12 parent::setUp();
13
14 self::$users['one'] = new ApiTestUser(
15 'ApitestuserA',
16 'Api Test UserA',
17 'api_test_userA@example.com',
18 array()
19 );
20
21 self::$users['two'] = new ApiTestUser(
22 'ApitestuserB',
23 'Api Test UserB',
24 'api_test_userB@example.com',
25 array()
26 );
27 }
28
29 public function tearDown() {
30 parent::tearDown();
31 }
32
33 function testLogin() {
34
35 $sessionArray = array();
36
37 foreach ( self::$users as $key => $user ) {
38
39 $params = array(
40 'action' => 'login',
41 'lgname' => $user->username,
42 'lgpassword' => $user->password
43 );
44 list( $result, , $session ) = $this->doApiRequest( $params );
45 $this->assertArrayHasKey( "login", $result );
46 $this->assertArrayHasKey( "result", $result['login'] );
47 $this->assertEquals( "NeedToken", $result['login']['result'] );
48 $token = $result['login']['token'];
49
50 $params = array(
51 'action' => 'login',
52 'lgtoken' => $token,
53 'lgname' => $user->username,
54 'lgpassword' => $user->password
55 );
56 list( $result, , $session ) = $this->doApiRequest( $params, $session );
57 $this->assertArrayHasKey( "login", $result );
58 $this->assertArrayHasKey( "result", $result['login'] );
59 $this->assertEquals( "Success", $result['login']['result'] );
60 $this->assertArrayHasKey( 'lgtoken', $result['login'] );
61
62 $this->assertNotEmpty( $session, 'API Login must return a session' );
63
64 $sessionArray[$key] = $session;
65
66 }
67
68 return $sessionArray;
69
70 }
71
72 /**
73 * @depends testLogin
74 */
75 function testCheckOut( $sessionArray ) {
76
77 global $wgUser;
78
79 $wgUser = self::$users['one']->user;
80
81 list( $result, , $session ) = $this->doApiRequestWithToken( array(
82 'action' => 'concurrency',
83 'ccaction' => 'checkout',
84 'record' => 1,
85 'resourcetype' => 'responding-to-moodbar-feedback'), $sessionArray['one'], self::$users['one']->user );
86
87 $this->assertEquals( "success", $result['concurrency']['result'] );
88
89 $wgUser = self::$users['two']->user;
90
91 list( $result, , $session ) = $this->doApiRequestWithToken( array(
92 'action' => 'concurrency',
93 'ccaction' => 'checkout',
94 'record' => 1,
95 'resourcetype' => 'responding-to-moodbar-feedback'), $sessionArray['two'], self::$users['two']->user );
96
97 $this->assertEquals( "failure", $result['concurrency']['result'] );
98
99 list( $result, , $session ) = $this->doApiRequestWithToken( array(
100 'action' => 'concurrency',
101 'ccaction' => 'checkout',
102 'record' => 2,
103 'resourcetype' => 'responding-to-moodbar-feedback'), $sessionArray['two'], self::$users['two']->user );
104
105 $this->assertEquals( "success", $result['concurrency']['result'] );
106
107 }
108
109
110 /**
111 * @depends testLogin
112 */
113 function testCheckIn( $sessionArray ) {
114
115 global $wgUser;
116
117 $wgUser = self::$users['one']->user;
118
119 list( $result, , $session ) = $this->doApiRequestWithToken( array(
120 'action' => 'concurrency',
121 'ccaction' => 'checkin',
122 'record' => 1,
123 'resourcetype' => 'responding-to-moodbar-feedback'), $sessionArray['one'], self::$users['one']->user );
124
125 $this->assertEquals( "success", $result['concurrency']['result'] );
126
127 list( $result, , $session ) = $this->doApiRequestWithToken( array(
128 'action' => 'concurrency',
129 'ccaction' => 'checkin',
130 'record' => 2,
131 'resourcetype' => 'responding-to-moodbar-feedback'), $sessionArray['one'], self::$users['one']->user );
132
133 $this->assertEquals( "failure", $result['concurrency']['result'] );
134
135 $wgUser = self::$users['two']->user;
136
137 list( $result, , $session ) = $this->doApiRequestWithToken( array(
138 'action' => 'concurrency',
139 'ccaction' => 'checkin',
140 'record' => 2,
141 'resourcetype' => 'responding-to-moodbar-feedback'), $sessionArray['two'], self::$users['two']->user );
142
143 $this->assertEquals( "success", $result['concurrency']['result'] );
144
145 }
146
147 /**
148 * @depends testLogin
149 */
150 function testInvalidCcacton( $sessionArray ) {
151 $exception = false;
152 try {
153 global $wgUser;
154
155 $wgUser = self::$users['one']->user;
156
157 list( $result, , $session ) = $this->doApiRequestWithToken( array(
158 'action' => 'concurrency',
159 'ccaction' => 'checkinX',
160 'record' => 1,
161 'resourcetype' => 'responding-to-moodbar-feedback'), $sessionArray['one'], self::$users['one']->user );
162 } catch ( UsageException $e ) {
163 $exception = true;
164 $this->assertEquals("Unrecognized value for parameter 'ccaction': checkinX",
165 $e->getMessage() );
166 }
167 $this->assertTrue( $exception, "Got exception" );
168
169 }
170
171 }