Skip to content

Commit

Permalink
test: added test for Sitemap class
Browse files Browse the repository at this point in the history
  • Loading branch information
thorsten committed Mar 30, 2024
1 parent 6b84cec commit c7d0bbe
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 117 deletions.
172 changes: 55 additions & 117 deletions phpmyfaq/src/phpMyFAQ/Sitemap.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,69 +92,40 @@ public function getAllFirstLetters(): string

$renderLetters = '<ul class="nav">';

if ($this->configuration->getDb() instanceof Sqlite3) {
$query = sprintf(
"
SELECT
DISTINCT UPPER(SUBSTR(fd.thema, 1, 1)) AS letters
FROM
%sfaqdata fd
LEFT JOIN
%sfaqdata_group AS fdg
ON
fd.id = fdg.record_id
LEFT JOIN
%sfaqdata_user AS fdu
ON
fd.id = fdu.record_id
WHERE
fd.lang = '%s'
AND
fd.active = 'yes'
AND
%s
ORDER BY
letters",
Database::getTablePrefix(),
Database::getTablePrefix(),
Database::getTablePrefix(),
$this->configuration->getLanguage()->getLanguage(),
$permPart
);
} else {
$query = sprintf(
"
SELECT
DISTINCT UPPER(SUBSTRING(fd.thema, 1, 1)) AS letters
FROM
%sfaqdata fd
LEFT JOIN
%sfaqdata_group AS fdg
ON
fd.id = fdg.record_id
LEFT JOIN
%sfaqdata_user AS fdu
ON
fd.id = fdu.record_id
WHERE
fd.lang = '%s'
AND
fd.active = 'yes'
AND
%s
ORDER BY
letters",
Database::getTablePrefix(),
Database::getTablePrefix(),
Database::getTablePrefix(),
$this->configuration->getLanguage()->getLanguage(),
$permPart
);
}
$query = sprintf(
"
SELECT
DISTINCT UPPER(%s(fd.thema, 1, 1)) AS letters
FROM
%sfaqdata fd
LEFT JOIN
%sfaqdata_group AS fdg
ON
fd.id = fdg.record_id
LEFT JOIN
%sfaqdata_user AS fdu
ON
fd.id = fdu.record_id
WHERE
fd.lang = '%s'
AND
fd.active = 'yes'
AND
%s
ORDER BY
letters",
$this->configuration->getDb() instanceof Sqlite3 ? 'SUBSTR' : 'SUBSTRING',
Database::getTablePrefix(),
Database::getTablePrefix(),
Database::getTablePrefix(),
$this->configuration->getLanguage()->getLanguage(),
$permPart
);

$result = $this->configuration->getDb()->query($query);
while ($row = $this->configuration->getDb()->fetchObject($result)) {
$letters = Strings::strtoupper($row->letters);

if (Strings::preg_match("/^\w+/iu", $letters) !== 0) {
$url = sprintf(
'%sindex.php?%saction=sitemap&amp;letter=%s&amp;lang=%s',
Expand Down Expand Up @@ -203,9 +174,8 @@ public function getRecordsFromLetter(string $letter = 'A'): string

$renderSiteMap = '';

$query = match (Database::getType()) {
'sqlite3' => sprintf(
"
$query = sprintf(
"
SELECT
fd.thema AS thema,
fd.id AS id,
Expand All @@ -226,66 +196,34 @@ public function getRecordsFromLetter(string $letter = 'A'): string
WHERE
fd.id = fcr.record_id
AND
SUBSTR(fd.thema, 1, 1) = '%s'
%s(fd.thema, 1, 1) = '%s'
AND
fd.lang = '%s'
AND
fd.active = 'yes'
AND
%s",
Database::getTablePrefix(),
Database::getTablePrefix(),
Database::getTablePrefix(),
Database::getTablePrefix(),
$letter,
$this->configuration->getLanguage()->getLanguage(),
$permPart
),
default => sprintf(
"
SELECT
fd.thema AS thema,
fd.id AS id,
fd.lang AS lang,
fcr.category_id AS category_id,
fd.content AS snap
FROM
%sfaqcategoryrelations fcr,
%sfaqdata fd
LEFT JOIN
%sfaqdata_group AS fdg
ON
fd.id = fdg.record_id
LEFT JOIN
%sfaqdata_user AS fdu
ON
fd.id = fdu.record_id
WHERE
fd.id = fcr.record_id
AND
SUBSTRING(fd.thema, 1, 1) = '%s'
AND
fd.lang = '%s'
AND
fd.active = 'yes'
AND
%s",
Database::getTablePrefix(),
Database::getTablePrefix(),
Database::getTablePrefix(),
Database::getTablePrefix(),
$letter,
$this->configuration->getLanguage()->getLanguage(),
$permPart
),
};
Database::getTablePrefix(),
Database::getTablePrefix(),
Database::getTablePrefix(),
Database::getTablePrefix(),
$this->configuration->getDb() instanceof Sqlite3 ? 'SUBSTR' : 'SUBSTRING',
$this->configuration->getDb()->escape($letter),
$this->configuration->getLanguage()->getLanguage(),
$permPart
);

var_dump($query);

$result = $this->configuration->getDb()->query($query);
$oldId = 0;
$parsedownExtra = new ParsedownExtra();
$parseDownExtra = new ParsedownExtra();

var_dump($this->configuration->getDb()->fetchObject($result));

while ($row = $this->configuration->getDb()->fetchObject($result)) {
if ($oldId != $row->id) {
$title = Strings::htmlspecialchars($row->thema, ENT_QUOTES, 'utf-8');
$title = Strings::htmlspecialchars($row->thema, ENT_QUOTES);
$url = sprintf(
'%sindex.php?%saction=faq&amp;cat=%d&amp;id=%d&amp;artlang=%s',
$this->configuration->getDefaultUrl(),
Expand All @@ -295,15 +233,15 @@ public function getRecordsFromLetter(string $letter = 'A'): string
$row->lang
);

$oLink = new Link($url, $this->configuration);
$oLink->itemTitle = $row->thema;
$oLink->text = $title;
$oLink->tooltip = $title;
$link = new Link($url, $this->configuration);
$link->itemTitle = $row->thema;
$link->text = $title;
$link->tooltip = $title;

$renderSiteMap .= '<li>' . $oLink->toHtmlAnchor() . '<br>' . "\n";
$renderSiteMap .= sprintf('<li>%s<br>', $link->toHtmlAnchor());

if ($this->configuration->get('main.enableMarkdownEditor')) {
$renderSiteMap .= Utils::chopString(strip_tags((string) $parsedownExtra->text($row->snap)), 25) .
$renderSiteMap .= Utils::chopString(strip_tags((string) $parseDownExtra->text($row->snap)), 25) .
" ...</li>\n";
} else {
$renderSiteMap .= Utils::chopString(strip_tags((string) $row->snap), 25) .
Expand Down
64 changes: 64 additions & 0 deletions tests/phpMyFAQ/SitemapTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

namespace phpMyFAQ;

use phpMyFAQ\Configuration\DatabaseConfiguration;
use phpMyFAQ\Database\Sqlite3;
use PHPUnit\Framework\TestCase;

class SitemapTest extends TestCase
{
private Sitemap $sitemap;

private Sqlite3 $db;
protected function setUp(): void
{
parent::setUp();

$_SERVER['HTTP_HOST'] = 'faq.example.org';

$dbConfig = new DatabaseConfiguration(PMF_TEST_DIR . '/content/core/config/database.php');
Database::setTablePrefix($dbConfig->getPrefix());
$this->db = Database::factory($dbConfig->getType());
$this->db->connect(
$dbConfig->getServer(),
$dbConfig->getUser(),
$dbConfig->getPassword(),
$dbConfig->getDatabase(),
$dbConfig->getPort()
);
$configuration = new Configuration($this->db);
$configuration->set('main.referenceURL', 'https://faq.example.org/');

$language = new Language($configuration);
$language->setLanguage(false, 'en');
$configuration->setLanguage($language);

$this->sitemap = new Sitemap($configuration);

$this->db->query(
'INSERT INTO faqdata ' .
'(id, lang, solution_id, sticky, thema, content, keywords, active, author, email, updated) VALUES ' .
'(1, \'en\', 1000, \'yes\', \'sample question\', \'sample answer\', \'sample keywords\', \'yes\', \'Author\', \'test@example.org\', \'date\')'
);
$this->db->query('INSERT INTO faqdata_group (record_id, group_id) VALUES (1,-1)');
$this->db->query('INSERT INTO faqdata_user (record_id, user_id) VALUES (1,-1)');
}

protected function tearDown(): void
{
$this->db->query('DELETE FROM faqdata WHERE id = 1');
$this->db->query('DELETE FROM faqdata_group WHERE record_id = 1');
$this->db->query('DELETE FROM faqdata_user WHERE record_id = 1');
}

public function testGetAllFirstLetters(): void
{
$letters = $this->sitemap->getAllFirstLetters();
$this->assertIsString($letters);
$this->assertEquals(
'<ul class="nav"><li class="nav-item"><a class="nav-link" href="https://faq.example.org/sitemap/S/en.html">S</a></li></ul>',
$letters
);
}
}

0 comments on commit c7d0bbe

Please sign in to comment.