1<?php
2
3namespace Elgg\Pages;
4
5use ElggPage;
6
7/**
8 * Integration test for ElggPage
9 */
10class ElggPageIntegrationTest extends \Elgg\IntegrationTestCase {
11
12	/**
13	 * @var \ElggUser
14	 */
15	protected $user;
16
17	/**
18	 * @var ElggPage
19	 */
20	protected $top_page;
21
22	/**
23	 * @var ElggPage
24	 */
25	protected $page;
26
27	/**
28	 * {@inheritDoc}
29	 */
30	public function up() {
31		$this->user = $this->createUser();
32
33		$session = elgg_get_session();
34		$session->setLoggedInUser($this->user);
35
36		// create a top page
37		$top_page = new ElggPage();
38		$top_page->owner_guid = $this->user->guid;
39		$top_page->container_guid = $this->user->guid;
40		$top_page->title = 'Test ElggPage top';
41		$top_page->description = 'This is a test for ElggPage';
42
43		$this->assertNotFalse($top_page->save());
44		$this->top_page = $top_page;
45
46		$page = new ElggPage();
47		$page->owner_guid = $this->user->guid;
48		$page->container_guid = $this->user->guid;
49		$page->title = 'Test ElggPage sub';
50		$page->description = 'This is a test for ElggPage which is a sub page';
51		$page->parent_guid = $this->top_page->guid;
52
53		$this->assertNotFalse($page->save());
54		$this->page = $page;
55	}
56
57	/**
58	 * {@inheritDoc}
59	 */
60	public function down() {
61
62		if (isset($this->top_page)) {
63			$this->top_page->delete();
64		}
65
66		if (isset($this->page)) {
67			$this->page->delete();
68		}
69
70		$session = elgg_get_session();
71		$session->setLoggedInUser($this->getAdmin());
72
73		if (isset($this->user)) {
74			$this->user->delete();
75		}
76
77		$session->removeLoggedInUser();
78	}
79
80	public function testCreateObjectToClass() {
81
82		/* @var $page \ElggPage */
83		$page = $this->createObject([
84			'subtype' => 'page',
85			'owner_guid' => $this->user->guid,
86			'container_guid' => $this->user->guid,
87			'title' => 'Test ElggPage',
88			'description' => 'This is a test for ElggPage',
89		]);
90
91		$this->assertInstanceOf(ElggPage::class, $page);
92		$this->assertNotEmpty($page->guid);
93		$this->assertEquals($this->user->guid, $page->owner_guid);
94		$this->assertEquals($this->user->guid, $page->container_guid);
95		$this->assertEquals('page', $page->getSubtype());
96	}
97
98	public function testIsTopPage() {
99
100		$top_page = $this->top_page;
101
102		$this->assertInstanceOf(ElggPage::class, $top_page);
103		$this->assertTrue($top_page->isTopPage());
104
105		$page = $this->page;
106
107		$this->assertInstanceOf(ElggPage::class, $page);
108		$this->assertFalse($page->isTopPage());
109	}
110
111	public function testGetParentEntity() {
112
113		$top_page = $this->top_page;
114		$page = $this->page;
115
116		$this->assertInstanceOf(ElggPage::class, $top_page);
117		$this->assertInstanceOf(ElggPage::class, $page);
118
119		$this->assertFalse($top_page->getParentEntity());
120		$this->assertEquals($page->getParentEntity()->guid, $top_page->guid);
121
122		// invalid parent page (non ElggPage guid)
123		$page->parent_guid = $this->user->guid;
124
125		$this->assertEquals($this->user->guid, $page->parent_guid);
126		$this->assertFalse($page->getParentEntity());
127
128		// invalid parent page (non guid)
129		$page->parent_guid = 'a';
130
131		$this->assertEquals('a', $page->parent_guid);
132		$this->assertFalse($page->getParentEntity());
133
134		// invalid parent page (no metadata)
135		$page->parent_guid = null;
136
137		$this->assertNull($page->parent_guid);
138		$this->assertFalse($page->getParentEntity());
139	}
140
141	public function testGetParentGUID() {
142
143		$top_page = $this->top_page;
144		$page = $this->page;
145
146		$this->assertInstanceOf(ElggPage::class, $top_page);
147		$this->assertInstanceOf(ElggPage::class, $page);
148
149		$this->assertEquals(0, $top_page->getParentGUID());
150		$this->assertEquals($top_page->guid, $page->getParentGUID());
151
152		// invalid parent page (non ElggPage guid)
153		$page->parent_guid = $this->user->guid;
154
155		$this->assertEquals($this->user->guid, $page->parent_guid);
156		$this->assertEquals($this->user->guid, $page->getParentGUID());
157
158		// invalid parent page (non guid)
159		$page->parent_guid = 'a';
160
161		$this->assertEquals('a', $page->parent_guid);
162		$this->assertNotEquals('a', $page->getParentGUID());
163
164		// invalid parent page (no metadata)
165		$page->parent_guid = null;
166
167		$this->assertNull($page->parent_guid);
168		$this->assertEquals(0, $page->getParentGUID());
169	}
170
171	public function testSetParentByGUID() {
172
173		$top_page = $this->top_page;
174		$page = $this->page;
175
176		$this->assertInstanceOf(ElggPage::class, $top_page);
177		$this->assertInstanceOf(ElggPage::class, $page);
178
179		// set to 0
180		$this->assertTrue($page->setParentByGUID(0));
181		$this->assertEquals(0, $page->getParentGUID());
182
183		// set to valid ElggPage
184		$this->assertTrue($page->setParentByGUID($top_page->guid));
185		$this->assertEquals($top_page->guid, $page->getParentGUID());
186
187		// set to non ElggPage
188		$this->assertFalse($page->setParentByGUID($this->user->guid));
189		$this->assertNotEquals($this->user->guid, $page->getParentGUID());
190	}
191
192	public function testSetParentEntity() {
193
194		$top_page = $this->top_page;
195		$page = $this->page;
196
197		$this->assertInstanceOf(ElggPage::class, $top_page);
198		$this->assertInstanceOf(ElggPage::class, $page);
199
200		// set to empty
201		$this->assertTrue($page->setParentEntity(null));
202		$this->assertEquals(0, $page->getParentGUID());
203
204		// set to valid ElggPage
205		$this->assertTrue($page->setParentEntity($top_page));
206		$this->assertEquals($top_page->guid, $page->getParentGUID());
207
208		// set to non ElggPage
209		$this->assertFalse($page->setParentEntity($this->user));
210		$this->assertNotEquals($this->user->guid, $page->getParentGUID());
211	}
212}
213