Просмотр исходного кода

making AttachmentViewer testable and implementing tests

El RIDO 8 лет назад
Родитель
Сommit
39860dfdc4
4 измененных файлов с 132 добавлено и 3 удалено
  1. 1 0
      js/privatebin.js
  2. 129 1
      js/test.js
  3. 1 1
      tpl/bootstrap.php
  4. 1 1
      tpl/page.php

+ 1 - 0
js/privatebin.js

@@ -2080,6 +2080,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
             $attachment = $('#attachment');
             $attachmentLink = $('#attachment a');
             $attachmentPreview = $('#attachmentPreview');
+            attachmentHasPreview = false;
         }
 
         return me;

+ 129 - 1
js/test.js

@@ -31,7 +31,10 @@ var jsc = require('jsverify'),
         '`': '`',
         '=': '='
     },
-    logFile = require('fs').createWriteStream('test.log');
+    logFile = require('fs').createWriteStream('test.log'),
+    mimeTypes = ['image/png','application/octet-stream'],
+    mimeFile = require('fs').createReadStream('/etc/mime.types'),
+    mimeLine = '';
 
 global.$ = global.jQuery = require('./jquery-3.1.1');
 global.sjcl = require('./sjcl-1.0.6');
@@ -51,6 +54,41 @@ console.info = console.warn = console.error = function () {
     logFile.write(Array.prototype.slice.call(arguments).join('') + '\n');
 }
 
+// populate mime types from environment
+mimeFile.on('data', function(data) {
+    mimeLine += data;
+    var index = mimeLine.indexOf('\n');
+    while (index > -1) {
+        var line = mimeLine.substring(0, index);
+        mimeLine = mimeLine.substring(index + 1);
+        parseMime(line);
+        index = mimeLine.indexOf('\n');
+    }
+});
+
+mimeFile.on('end', function() {
+    if (mimeLine.length > 0) {
+        parseMime(mimeLine);
+    }
+});
+
+function parseMime(line) {
+    // ignore comments
+    var index = line.indexOf('#');
+    if (index > -1) {
+        line = line.substring(0, index);
+    }
+
+    // ignore bits after tabs
+    index = line.indexOf('\t');
+    if (index > -1) {
+        line = line.substring(0, index);
+    }
+    if (line.length > 0) {
+        mimeTypes.push(line);
+    }
+}
+
 /**
  * convert all applicable characters to HTML entities
  *
@@ -1487,3 +1525,93 @@ describe('PasteViewer', function () {
         );
     });
 });
+
+describe('AttachmentViewer', function () {
+    describe('setAttachment, showAttachment, removeAttachment, hideAttachment, hideAttachmentPreview, hasAttachment, getAttachment & moveAttachmentTo', function () {
+        this.timeout(30000);
+        before(function () {
+            cleanup();
+        });
+
+        jsc.property(
+            'displays & hides data as requested',
+            jsc.elements(mimeTypes),
+            jsc.nearray(jsc.elements(base64String)),
+            'string',
+            'string',
+            'string',
+            function (mimeType, base64, filename, prefix, postfix) {
+                var clean = jsdom(),
+                    data = 'data:' + mimeType + ';base64,' + base64.join(''),
+                    isImage = mimeType.substring(0, 6) === 'image/',
+                    results = [];
+                prefix = prefix.replace(/%(s|d)/g, '%%');
+                postfix = postfix.replace(/%(s|d)/g, '%%');
+                $('body').html(
+                    '<div id="attachment" role="alert" class="hidden alert ' +
+                    'alert-info"><span class="glyphicon glyphicon-download-' +
+                    'alt" aria-hidden="true"></span> <a class="alert-link">' +
+                    'Download attachment</a></div><div id="attachmentPrevie' +
+                    'w" class="hidden"></div>'
+                );
+                $.PrivateBin.AttachmentViewer.init();
+                results.push(
+                    !$.PrivateBin.AttachmentViewer.hasAttachment() &&
+                    $('#attachment').hasClass('hidden') &&
+                    $('#attachmentPreview').hasClass('hidden')
+                );
+                if (filename.length) {
+                    $.PrivateBin.AttachmentViewer.setAttachment(data, filename);
+                } else {
+                    $.PrivateBin.AttachmentViewer.setAttachment(data);
+                }
+                var attachement = $.PrivateBin.AttachmentViewer.getAttachment()
+                results.push(
+                    $.PrivateBin.AttachmentViewer.hasAttachment() &&
+                    $('#attachment').hasClass('hidden') &&
+                    $('#attachmentPreview').hasClass('hidden') &&
+                    attachement[0] === data &&
+                    attachement[1] === filename
+                );
+                $.PrivateBin.AttachmentViewer.showAttachment();
+                results.push(
+                    !$('#attachment').hasClass('hidden') &&
+                    (isImage ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden'))
+                );
+                $.PrivateBin.AttachmentViewer.hideAttachment();
+                results.push(
+                    $('#attachment').hasClass('hidden') &&
+                    (isImage ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden'))
+                );
+                if (isImage) {
+                    $.PrivateBin.AttachmentViewer.hideAttachmentPreview();
+                    results.push($('#attachmentPreview').hasClass('hidden'));
+                }
+                $.PrivateBin.AttachmentViewer.showAttachment();
+                results.push(
+                    !$('#attachment').hasClass('hidden') &&
+                    (isImage ? !$('#attachmentPreview').hasClass('hidden') : $('#attachmentPreview').hasClass('hidden'))
+                );
+                var element = $('<div></div>');
+                $.PrivateBin.AttachmentViewer.moveAttachmentTo(element, prefix + '%s' + postfix);
+                if (filename.length) {
+                    results.push(
+                        element.children()[0].href === data &&
+                        element.children()[0].getAttribute('download') === filename &&
+                        element.children()[0].text === prefix + filename + postfix
+                    );
+                } else {
+                    results.push(element.children()[0].href === data);
+                }
+                $.PrivateBin.AttachmentViewer.removeAttachment();
+                results.push(
+                    $('#attachment').hasClass('hidden') &&
+                    $('#attachmentPreview').hasClass('hidden')
+                );
+                clean();
+                return results.every(element => element);
+            }
+        );
+    });
+});
+

+ 1 - 1
tpl/bootstrap.php

@@ -70,7 +70,7 @@ if ($MARKDOWN):
 <?php
 endif;
 ?>
-		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-NDAfNtN88qJLs6tH5RjjDDdd/sbFFrufgR8RpT6UACus40DLSO6vmSNje9L5IZl+93XBaTxryE7ud9Irkjfh2A==" crossorigin="anonymous"></script>
+		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-/YMgC56Z2fpsurdKZVLiOK7zTx63c68RO/9UZ8SC34ssNaVoXZhhNtEUscwtdEOCGeY7tU7UGc6r0+BSs7bbJQ==" crossorigin="anonymous"></script>
 		<!--[if lt IE 10]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<![endif]-->

+ 1 - 1
tpl/page.php

@@ -48,7 +48,7 @@ if ($MARKDOWN):
 <?php
 endif;
 ?>
-		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-NDAfNtN88qJLs6tH5RjjDDdd/sbFFrufgR8RpT6UACus40DLSO6vmSNje9L5IZl+93XBaTxryE7ud9Irkjfh2A==" crossorigin="anonymous"></script>
+		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-/YMgC56Z2fpsurdKZVLiOK7zTx63c68RO/9UZ8SC34ssNaVoXZhhNtEUscwtdEOCGeY7tU7UGc6r0+BSs7bbJQ==" crossorigin="anonymous"></script>
 		<!--[if lt IE 10]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<![endif]-->