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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 +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; +}