From a57fac3b11a84fc4f7fac77a1fc0a4bc5b320de0 Mon Sep 17 00:00:00 2001 From: Peter Molnar Date: Sat, 1 Dec 2018 10:45:27 +0000 Subject: [PATCH] adding first set of tests --- tests.py | 54 ++++++++++++++++++++++++++++++++++++++++++ tests/.tests.jpg.json | 29 +++++++++++++++++++++++ tests/index.md | 29 +++++++++++++++++++++++ tests/tests.jpg | Bin 0 -> 29123 bytes 4 files changed, 112 insertions(+) create mode 100644 tests.py create mode 100644 tests/.tests.jpg.json create mode 100644 tests/index.md create mode 100644 tests/tests.jpg diff --git a/tests.py b/tests.py new file mode 100644 index 0000000..d657a64 --- /dev/null +++ b/tests.py @@ -0,0 +1,54 @@ +import unittest +import pandoc +import exiftool +import nasg +import os +import json + +class TestNASG(unittest.TestCase): + def test_url2slug(self): + i = 'http://boffosocko.com/2017/10/28/content-bloat-privacy-archives-peter-molnar/' + o = 'boffosockocom20171028content-bloat-privacy-archives-peter-molnar' + self.assertEqual(nasg.url2slug(i), o) + +class TestSingular(unittest.TestCase): + singular = nasg.Singular('tests/index.md') + + # TODO: WTF? + #def test_category(self): + #print(self.singular.category) + #self.assertEqual(self.singular.category, 'tests') + + #def test_files(self): + + #self.assertEqual( + #self.singular.files, + #['/home/pemolnar/Projects/petermolnar.net/nasg/tests/tests.jpg'] + + def test_is_photo(self): + self.assertTrue(self.singular.is_photo) + + def test_is_front(self): + self.assertFalse(self.singular.is_front) + + def test_singular_tags(self): + self.assertEqual( + self.singular.tags, + ['Llyn Idwal', 'winter', 'spring', 'cloudy', 'Snowdonia', 'mountain', 'clouds', 'lake', 'mountains', 'snow', 'Wales', 'water'] + ) + +class TestExiftool(unittest.TestCase): + def test_exiftool(self): + with open('tests/.tests.jpg.json', 'rt') as expected: + o = json.loads(expected.read()) + self.assertEqual(exiftool.Exif('tests/tests.jpg'), o) + +class TestPandoc(unittest.TestCase): + def test_pandoc(self): + i = '_this_ is a **test** string for [pandoc](https://pandoc.org)' + o = '

this is a test string for pandoc

' + self.assertEqual(pandoc.Pandoc(i), o) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/.tests.jpg.json b/tests/.tests.jpg.json new file mode 100644 index 0000000..292c8f8 --- /dev/null +++ b/tests/.tests.jpg.json @@ -0,0 +1,29 @@ +{ + "Aperture": 11.0, + "Artist": "Peter Molnar", + "Copyright": "Copyright 2016 Peter Molnar (https://petermolnar.net), CC BY-NC-ND 4.0", + "CreateDate": "2016-05-01T00:08:24+00:00", + "DateTimeOriginal": "2016-05-01T00:08:24+00:00", + "Description": "One can always wish for the perfect weather, yet most of the times, it remains a wish. Not this time.\n\nThere is a National Trust recommendation to visit Llyn Idwal, which Nora[^1] spotted, and they were right about the place: it's magnificent. We really weren't expecting snow on the mountains in May, but that, combined with the clouds and the late afternoon sunshine was just perfect.\n\nI cropped the image, but apart from that, it really looked like this. No edits, no nothing.\n\n[^1]: https://norahamucska.eu", + "ExposureTime": "1/320", + "FNumber": 11.0, + "FOV": "67.4 deg", + "FileName": "llyn-idwal.jpg", + "FileSize": 29123, + "FileType": "JPEG", + "FocalLength": "18.0 mm", + "FocalLengthIn35mmFormat": "27 mm", + "GPSLatitude": 53.115584, + "GPSLongitude": -4.030248, + "Headline": "Llyn Idwal", + "HierarchicalSubject": "Llyn Idwal", + "ISO": 160, + "ImageHeight": 139, + "ImageWidth": 256, + "LensID": "HD PENTAX-DA 16-85mm F3.5-5.6 ED DC WR", + "MIMEType": "image/jpeg", + "Model": "PENTAX K-5 II s", + "ModifyDate": "2016-05-01T00:08:24+00:00", + "ReleaseDate": "2016-07-23T09:00:23+00:00", + "SourceFile": "tests/llyn-idwal.jpg" +} \ No newline at end of file diff --git a/tests/index.md b/tests/index.md new file mode 100644 index 0000000..f38c54c --- /dev/null +++ b/tests/index.md @@ -0,0 +1,29 @@ +--- +GPSLatitude: 53.115584 +GPSLongitude: -4.030248 +published: 2016-07-23T09:00:23+0000 +tags: +- Llyn Idwal +- winter +- spring +- cloudy +- Snowdonia +- mountain +- clouds +- lake +- mountains +- snow +- Wales +- water +title: Llyn Idwal +--- + +![](tests.jpg) + +One can always wish for the perfect weather, yet most of the times, it remains a wish. Not this time. + +There is a National Trust recommendation to visit Llyn Idwal, which Nora[^1] spotted, and they were right about the place: it's magnificent. We really weren't expecting snow on the mountains in May, but that, combined with the clouds and the late afternoon sunshine was just perfect. + +I cropped the image, but apart from that, it really looked like this. No edits, no nothing. + +[^1]: https://norahamucska.eu diff --git a/tests/tests.jpg b/tests/tests.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad40d36d645474b53d0b360e5c9b487976ccd1e8 GIT binary patch literal 29123 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

3!-2V0>kD{9(T2< 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 literal 0 HcmV?d00001