aboutsummaryrefslogtreecommitdiffstats
path: root/apps/contactsinteraction/tests/Db/RecentContactMapperTest.php
blob: f5df27820d789bb117e6136b0cdb4a6eaac51bb5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php

declare(strict_types=1);

/**
 * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */
namespace OCA\ContactsInteraction\Tests\Db;

use OCA\ContactsInteraction\Db\RecentContact;
use OCA\ContactsInteraction\Db\RecentContactMapper;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IUser;
use OCP\Server;
use Sabre\VObject\Component\VCard;
use Sabre\VObject\UUIDUtil;
use Test\TestCase;

/**
 * @group DB
 */
class RecentContactMapperTest extends TestCase {
	private RecentContactMapper $recentContactMapper;
	private ITimeFactory $time;

	protected function setUp(): void {
		parent::setUp();

		$this->recentContactMapper = Server::get(RecentContactMapper::class);
		$this->time = Server::get(ITimeFactory::class);
	}

	protected function tearDown(): void {
		parent::tearDown();

		$this->recentContactMapper->cleanUp(time());
	}

	public function testCreateRecentContact(): void {
		$contact = $this->createRecentContact();
		$this->assertNotNull($contact->getId());
	}

	public function testFindAll(): void {
		$this->createRecentContact();
		$this->createRecentContact();

		$contacts = $this->recentContactMapper->findAll('admin');
		$this->assertCount(2, $contacts);
	}

	public function testFindMatchByEmail(): void {
		$this->createRecentContact();
		$contact = $this->createRecentContact('foo@bar');

		$user = $this->createMock(IUser::class);
		$user->method('getUID')
			->willReturn('admin');

		$result = $this->recentContactMapper->findMatch($user, null, 'foo@bar', null);

		$this->assertCount(1, $result);
		$this->assertEquals($contact->getId(), $result[0]->getId());
	}

	public function testFindMatchByFederatedCloudId(): void {
		$this->createRecentContact();
		$contact = $this->createRecentContact(null, 'foo.bar');

		$user = $this->createMock(IUser::class);
		$user->method('getUID')
			->willReturn('admin');

		$result = $this->recentContactMapper->findMatch($user, null, null, 'foo.bar');

		$this->assertCount(1, $result);
		$this->assertEquals($contact->getId(), $result[0]->getId());
	}

	public function testCleanUp(): void {
		$this->createRecentContact();
		$this->createRecentContact();
		$this->assertCount(2, $this->recentContactMapper->findAll('admin'));

		$this->recentContactMapper->cleanUp(time());
		$this->assertCount(0, $this->recentContactMapper->findAll('admin'));
	}

	protected function createRecentContact(?string $email = null, ?string $federatedCloudId = null): RecentContact {
		$props = [
			'URI' => UUIDUtil::getUUID(),
			'FN' => 'Foo Bar',
			'CATEGORIES' => 'Recently contacted',
		];

		$time = $this->time->getDateTime();
		$time->modify('-14days');

		$contact = new RecentContact();
		$contact->setActorUid('admin');
		$contact->setCard((new VCard($props))->serialize());
		$contact->setLastContact($time->getTimestamp());

		if ($email !== null) {
			$contact->setEmail($email);
		}

		if ($federatedCloudId !== null) {
			$contact->setFederatedCloudId($federatedCloudId);
		}

		return $this->recentContactMapper->insert($contact);
	}
}