Files
roda-student-web-if-develop…/groups/Tapops/tests/document-formatter.test.mjs
T

112 lines
4.4 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { DocumentFormatter } from '../js/utils/document-formatter.js';
test('parses comma-separated and JSON string tags', () => {
assert.deepEqual(DocumentFormatter.parseTags('akademik, panduan, 2026'), [
'akademik',
'panduan',
'2026',
]);
assert.deepEqual(DocumentFormatter.parseTags('["kerja praktik","kp"]'), [
'kerja praktik',
'kp',
]);
});
test('formats tag labels without breaking abbreviations', () => {
assert.equal(DocumentFormatter.formatTag('SOP'), 'SOP');
assert.equal(DocumentFormatter.formatTag('kp'), 'KP');
assert.equal(DocumentFormatter.formatTag('kerja praktek'), 'Kerja Praktek');
assert.equal(DocumentFormatter.formatTag('Kerja Praktek'), 'Kerja Praktek');
assert.equal(DocumentFormatter.formatTag('umum'), 'Umum');
});
test('maps parsed tags to fixed repository categories', () => {
assert.equal(DocumentFormatter.categoryFromTags(['TA']), 'skripsi');
assert.equal(DocumentFormatter.categoryFromTags(['Kalender']), 'akademik');
assert.equal(DocumentFormatter.categoryFromTags(['kp']), 'praktik');
assert.equal(DocumentFormatter.categoryFromTags(['surat']), 'umum');
assert.equal(DocumentFormatter.categoryFromTags([]), 'umum');
});
test('derives file type and safe download filename from document name', () => {
assert.equal(DocumentFormatter.fileTypeFromName('Panduan Akademik.pdf'), 'pdf');
assert.equal(DocumentFormatter.fileTypeFromName('Form KP.DOCX'), 'docx');
assert.equal(DocumentFormatter.fileTypeFromName('Catatan.txt'), 'txt');
assert.equal(DocumentFormatter.fileTypeFromName('Materi Seminar.pptx'), 'pptx');
assert.equal(DocumentFormatter.downloadFilename('Form KP', 'docx'), 'Form KP.docx');
assert.equal(DocumentFormatter.downloadFilename('Template lama.DOC', 'doc'), 'Template lama.DOC');
assert.equal(DocumentFormatter.downloadFilename('Kalender.pdf', 'pdf'), 'Kalender.pdf');
});
test('maps supported file names to display metadata for cards', () => {
assert.deepEqual(DocumentFormatter.fileInfoFromName('Panduan Akademik.pdf'), {
type: 'pdf',
icon: 'fas fa-file-pdf',
css: 'doc-type-pdf',
});
assert.deepEqual(DocumentFormatter.fileInfoFromName('Form KP.DOCX'), {
type: 'docx',
icon: 'fas fa-file-word',
css: 'doc-type-docx',
});
assert.deepEqual(DocumentFormatter.fileInfoFromName('Catatan.txt'), {
type: 'txt',
icon: 'fas fa-file-alt',
css: 'doc-type-txt',
});
assert.deepEqual(DocumentFormatter.fileInfoFromName('Materi Seminar.pptx'), {
type: 'pptx',
icon: 'fas fa-file-powerpoint',
css: 'doc-type-pptx',
});
assert.deepEqual(DocumentFormatter.fileInfoFromName('Lampiran.7z'), {
type: '7z',
icon: 'fas fa-file-archive',
css: 'doc-type-archive',
});
});
test('derives file metadata from expanded Directus file records when display title has no extension', () => {
const pdfItem = {
nama_berkas: 'SOP Kerja Praktek',
file: {
filename_download: 'SOP Kerja Praktek.pdf',
type: 'application/pdf',
},
};
const docxItem = {
nama_berkas: 'Panduan Penulisan Proposal Kerja Praktek',
file: {
filename_download: 'Panduan Penulisan Proposal Kerja Praktek.docx',
type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
},
};
assert.deepEqual(DocumentFormatter.fileInfoFromItem(pdfItem), {
type: 'pdf',
icon: 'fas fa-file-pdf',
css: 'doc-type-pdf',
});
assert.deepEqual(DocumentFormatter.fileInfoFromItem(docxItem), {
type: 'docx',
icon: 'fas fa-file-word',
css: 'doc-type-docx',
});
assert.equal(DocumentFormatter.downloadFilenameFromItem(pdfItem), 'SOP Kerja Praktek.pdf');
assert.equal(DocumentFormatter.downloadFilenameFromItem(docxItem), 'Panduan Penulisan Proposal Kerja Praktek.docx');
});
test('falls back to MIME type when Directus filename metadata has no extension', () => {
assert.deepEqual(DocumentFormatter.fileInfoFromItem({
nama_berkas: 'Berkas Presentasi',
file: { type: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' },
}), {
type: 'pptx',
icon: 'fas fa-file-powerpoint',
css: 'doc-type-pptx',
});
});