From f7136c7271822fb5e00ef0bcf09558f6f95ccb71 Mon Sep 17 00:00:00 2001 From: Braun Patrik Date: Sat, 15 Jul 2017 21:04:41 +0200 Subject: [PATCH] adding jpeg metadata parsing test --- backend/model/threading/DiskMangerWorker.ts | 11 +++-- .../lightbox/lightbox.gallery.component.ts | 1 - package.json | 1 + .../unit/assets/test image öüóőúéáű-.,.jpg | Bin 0 -> 57172 bytes .../{uesr => user}/AuthenticationMWs.ts | 0 .../model/threading/DiskMangerWorker.spec.ts | 44 ++++++++++++++++++ 6 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 test/backend/unit/assets/test image öüóőúéáű-.,.jpg rename test/backend/unit/middlewares/{uesr => user}/AuthenticationMWs.ts (100%) create mode 100644 test/backend/unit/model/threading/DiskMangerWorker.spec.ts diff --git a/backend/model/threading/DiskMangerWorker.ts b/backend/model/threading/DiskMangerWorker.ts index 0d80b181..a6627f13 100644 --- a/backend/model/threading/DiskMangerWorker.ts +++ b/backend/model/threading/DiskMangerWorker.ts @@ -43,15 +43,17 @@ export class DiskMangerWorker { try { - fs.stat(fullPath, (err, data) => { - metadata.fileSize = data.size; - }); + try { + const stat = fs.statSync(fullPath); + metadata.fileSize = stat.size; + } catch (err) { + } try { const exif = exif_parser.create(data).parse(); metadata.cameraData = { ISO: exif.tags.ISO, - model: exif.tags.Model, + model: exif.tags.Model.toString("utf8"), make: exif.tags.Make, fStop: exif.tags.FNumber, exposure: exif.tags.ExposureTime, @@ -100,7 +102,6 @@ export class DiskMangerWorker { Logger.info(LOG_TAG, "Error parsing iptc data", fullPath); } - return resolve(metadata); } catch (err) { return reject({file: fullPath, error: err}); diff --git a/frontend/app/gallery/lightbox/lightbox.gallery.component.ts b/frontend/app/gallery/lightbox/lightbox.gallery.component.ts index 25f2a7e8..fd7c0324 100644 --- a/frontend/app/gallery/lightbox/lightbox.gallery.component.ts +++ b/frontend/app/gallery/lightbox/lightbox.gallery.component.ts @@ -97,7 +97,6 @@ export class GalleryLightboxComponent implements OnDestroy { activePhotoId: number = null; private showPhoto(photoIndex: number, resize: boolean = true) { - console.log("showing photo"); this.activePhoto = null; this.changeDetector.detectChanges(); this.updateActivePhoto(photoIndex, resize); diff --git a/package.json b/package.json index 6e5aef36..b83ce597 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "@angular/platform-browser-dynamic": "~4.3.0", "@angular/router": "~4.3.0", "@types/bcryptjs": "^2.4.0", + "@types/chai": "^4.0.1", "@types/express": "^4.0.36", "@types/express-session": "1.15.1", "@types/gm": "^1.17.31", diff --git a/test/backend/unit/assets/test image öüóőúéáű-.,.jpg b/test/backend/unit/assets/test image öüóőúéáű-.,.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b44dcb5d1864a8634efd043f339208ebd0534483 GIT binary patch literal 57172 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 z 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 I@7bH%KqBSk&|vVezU@=h?!l55KEX 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 W>{#BllxbNS8nC<+C#e0K|9=2U0DtTN literal 0 HcmV?d00001 diff --git a/test/backend/unit/middlewares/uesr/AuthenticationMWs.ts b/test/backend/unit/middlewares/user/AuthenticationMWs.ts similarity index 100% rename from test/backend/unit/middlewares/uesr/AuthenticationMWs.ts rename to test/backend/unit/middlewares/user/AuthenticationMWs.ts diff --git a/test/backend/unit/model/threading/DiskMangerWorker.spec.ts b/test/backend/unit/model/threading/DiskMangerWorker.spec.ts new file mode 100644 index 00000000..c0d7ceae --- /dev/null +++ b/test/backend/unit/model/threading/DiskMangerWorker.spec.ts @@ -0,0 +1,44 @@ +import {expect} from "chai"; +import {DiskMangerWorker} from "../../../../../backend/model/threading/DiskMangerWorker"; +import * as path from "path"; +import {Config} from "../../../../../common/config/private/Config"; +import {ProjectPath} from "../../../../../backend/ProjectPath"; + +describe('DiskMangerWorker', () => { + + it('should call next on authenticated', async () => { + Config.Server.imagesFolder = path.join(__dirname, "/../../assets"); + ProjectPath.ImageFolder = path.join(__dirname, "/../../assets"); + const dir = await DiskMangerWorker.scanDirectory("/"); + console.log(dir.photos[0].metadata); + expect(dir.photos.length).to.be.equals(1); + expect(dir.photos[0].name).to.be.equals("test image öüóőúéáű-.,.jpg"); + expect(dir.photos[0].metadata.keywords).to.deep.equals(['Berkley,USA']); + expect(dir.photos[0].metadata.fileSize).to.deep.equals(57172); + expect(dir.photos[0].metadata.size).to.deep.equals({width: 140, height: 93}); + expect(dir.photos[0].metadata.cameraData).to.deep.equals({ + ISO: 3200, + model: 'óüöúőűáé ÓÜÖÚŐŰÁÉ', + make: 'Canon', + fStop: 5.6, + exposure: 0.00125, + focalLength: 85, + lens: 'EF-S15-85mm f/3.5-5.6 IS USM' + }); + + expect(dir.photos[0].metadata.positionData).to.deep.equals({ + GPSData: { + latitude: 37.871093333333334, + longitude: -122.25678, + altitude: 102.4498997995992 + }, + country: 'óüöúőűáé ÓÜÖÚŐŰÁÉ', + state: 'óüöúőűáé ÓÜÖÚŐŰÁÉ', + city: 'óüöúőűáé ÓÜÖÚŐŰÁÉ' + }); + + expect(dir.photos[0].metadata.creationDate).to.be.equals(1436610566000); + + }); + +});