From b8e4da856fa53aa5b6b9324119e8ade92188207d Mon Sep 17 00:00:00 2001 From: sterni Date: Fri, 22 Nov 2024 13:15:37 +0100 Subject: [PATCH] test(sterni/mblog/golden): check mblog against expected output This should allow for refactors with more confidence as we can make sure base functionality stays the same. It is important to test image extraction, so unfortunately we need to check in a base64 rendering of an image file. I've used //users/tvlbot.jpg, so git should at least be able to deduplicate the extracted content. Note that this was achieved by altering the note message since I wasn't able to add the picture in the iOS Notes.app without the image being recompressed. To get extra benefit, we also add the test note to the mime4cl test suite. The expected output can be updated with mblog $(mg build :maildir) expected Change-Id: I0aa493b206439018ad89745bacbd47af78bd1396 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12911 Tested-by: BuildkiteCI Autosubmit: sterni Reviewed-by: sterni --- .../lisp/mime4cl/test/samples/mail-note.msg | 338 ++++++++++++++++++ users/sterni/mblog/golden/default.nix | 41 +++ .../IMG_1637.JPG | Bin 0 -> 16932 bytes .../index.html | 2 + users/sterni/mblog/golden/expected/index.html | 2 + users/sterni/mblog/golden/expected/style.css | 13 + 6 files changed, 396 insertions(+) create mode 100644 third_party/lisp/mime4cl/test/samples/mail-note.msg create mode 100644 users/sterni/mblog/golden/default.nix create mode 100644 users/sterni/mblog/golden/expected/d81cb91d-c210-46b1-835a-6a7c34db666b/IMG_1637.JPG create mode 100644 users/sterni/mblog/golden/expected/d81cb91d-c210-46b1-835a-6a7c34db666b/index.html create mode 100644 users/sterni/mblog/golden/expected/index.html create mode 100644 users/sterni/mblog/golden/expected/style.css diff --git a/third_party/lisp/mime4cl/test/samples/mail-note.msg b/third_party/lisp/mime4cl/test/samples/mail-note.msg new file mode 100644 index 000000000..577fceb21 --- /dev/null +++ b/third_party/lisp/mime4cl/test/samples/mail-note.msg @@ -0,0 +1,338 @@ +Content-Type: multipart/related; + type="text/html"; + boundary=Apple-Mail-89556518-7D3B-49E6-BE3B-A3267CB0D688 +Content-Transfer-Encoding: 7bit +From: sternenseemann +X-Uniform-Type-Identifier: com.apple.mail-note +Mime-Version: 1.0 (iOS/17.6.1 \(21G93\) dataaccessd/1.0) +Date: Fri, 22 Nov 2024 12:49:56 +0100 +X-Mail-Created-Date: Fri, 22 Nov 2024 12:49:52 +0100 +Subject: example note +X-Universally-Unique-Identifier: D81CB91D-C210-46B1-835A-6A7C34DB666B +Message-Id: <2CF676DC-A86B-433A-8DB5-53D547D415F3@systemli.org> +X-TUID: GhgIofLgzNSd + + +--Apple-Mail-89556518-7D3B-49E6-BE3B-A3267CB0D688 +Content-Type: text/html; + charset=utf-8 +Content-Transfer-Encoding: quoted-printable + +
example note

bold italic bold & italic= + strikethrough

= +

It is technically possible= + to create arbitrary (?) HTML markup via copy & paste from e.g. a browse= +r. Let=E2=80=99s not test that for now.
= + +--Apple-Mail-89556518-7D3B-49E6-BE3B-A3267CB0D688 +Content-Type: image/jpeg; + name=IMG_1637.JPG; + x-apple-part-url="C457B697-405B-4A9D-9419-AC33C4A20638@mobilenotes.apple.com" +Content-Disposition: inline; + filename=IMG_1637.JPG +Content-Transfer-Encoding: base64 +Content-Id: + +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 +uP/Z +--Apple-Mail-89556518-7D3B-49E6-BE3B-A3267CB0D688-- diff --git a/users/sterni/mblog/golden/default.nix b/users/sterni/mblog/golden/default.nix new file mode 100644 index 000000000..17350112c --- /dev/null +++ b/users/sterni/mblog/golden/default.nix @@ -0,0 +1,41 @@ +# SPDX-License-Identifier: GPL-3.0-only +# SPDX-FileCopyrightText: Copyright (C) 2024 by sterni +{ depot, pkgs, lib, ... }: + +let + maildir = pkgs.runCommandNoCC "mblog-golden-example-maildir" { } '' + mkdir -p "$out/cur" + cp --reflink=auto \ + "${depot.path.origSrc + "/third_party/lisp/mime4cl/test/samples/mail-note.msg"}" \ + "$out/cur/1732277542.274467_1.wolfgang,U=1:2,S" + ''; + + # Make golden test based on the given mblog derivation and add subtarget + # golden tests for all meta.ci.targets. + makeGoldenTest = mblog: + pkgs.runCommand "mblog-golden-tests" + { + passthru = { + inherit maildir; + } // lib.mapAttrs (_: makeGoldenTest) ( + lib.attrsets.getAttrs mblog.meta.ci.targets mblog + ); + + nativeBuildInputs = [ + mblog + ]; + + meta.ci = { + inherit (mblog.meta.ci) targets; + }; + } + '' + mkdir -p actual + mblog ${maildir} actual + + diff --color=always -ru ${./expected} actual + touch "$out" + ''; +in + +makeGoldenTest depot.users.sterni.mblog diff --git a/users/sterni/mblog/golden/expected/d81cb91d-c210-46b1-835a-6a7c34db666b/IMG_1637.JPG b/users/sterni/mblog/golden/expected/d81cb91d-c210-46b1-835a-6a7c34db666b/IMG_1637.JPG new file mode 100644 index 0000000000000000000000000000000000000000..f0811418dff57aafc24516c0dbcb62e36be687f8 GIT binary patch literal 16932 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 O>Sg}`QuHg)xc}L=;un+v literal 0 HcmV?d00001 diff --git a/users/sterni/mblog/golden/expected/d81cb91d-c210-46b1-835a-6a7c34db666b/index.html b/users/sterni/mblog/golden/expected/d81cb91d-c210-46b1-835a-6a7c34db666b/index.html new file mode 100644 index 000000000..8f82f7ae8 --- /dev/null +++ b/users/sterni/mblog/golden/expected/d81cb91d-c210-46b1-835a-6a7c34db666b/index.html @@ -0,0 +1,2 @@ + +example note
example note

bold italic bold & italic strikethrough


It is technically possible to create arbitrary (?) HTML markup via copy & paste from e.g. a browser. Let’s not test that for now.
\ No newline at end of file diff --git a/users/sterni/mblog/golden/expected/index.html b/users/sterni/mblog/golden/expected/index.html new file mode 100644 index 000000000..fc2cd83b2 --- /dev/null +++ b/users/sterni/mblog/golden/expected/index.html @@ -0,0 +1,2 @@ + +mblog

mblog

example note2024-11-22T11·49+00
\ No newline at end of file diff --git a/users/sterni/mblog/golden/expected/style.css b/users/sterni/mblog/golden/expected/style.css new file mode 100644 index 000000000..3babfdc23 --- /dev/null +++ b/users/sterni/mblog/golden/expected/style.css @@ -0,0 +1,13 @@ + +header, main { + width: 100%; + max-width: 800px; +} + +main img { + max-width: 100%; +} + +a:link, a:visited { + color: blue; +}