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 <sternenseemann@systemli.org>
Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
sterni 2024-11-22 13:15:37 +01:00 committed by clbot
parent 024783f535
commit b8e4da856f
6 changed files with 396 additions and 0 deletions

View file

@ -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 <sternenseemann@systemli.org>
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
<html><head></head><body style=3D"overflow-wrap: break-word; -webkit-nbsp-mo=
de: space; line-break: after-white-space;"><div><u>example note</u></div><di=
v><br></div><div><b>bold&nbsp;</b><i>italic</i>&nbsp;<i><b>bold &amp; italic=
</b></i>&nbsp;<strike>strikethrough</strike></div><div><strike><br></strike>=
</div><div><strike><object type=3D"application/x-apple-msg-attachment" data=3D=
"cid:C457B697-405B-4A9D-9419-AC33C4A20638@mobilenotes.apple.com"></object></=
strike></div><div><strike><br></strike></div><div>It is technically possible=
to create arbitrary (?) HTML markup via copy &amp; paste from e.g. a browse=
r. Let=E2=80=99s not test that for now.</div></body></html>=
--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: <C457B697-405B-4A9D-9419-AC33C4A20638@mobilenotes.apple.com>
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
uP/Z
--Apple-Mail-89556518-7D3B-49E6-BE3B-A3267CB0D688--

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html><head><meta charset='utf-8'><meta viewport='width=device-width'><title>example note</title><link rel='stylesheet' type='text/css' href='../style.css'></head><body><header><nav><a href='..'>index</a></nav></header><main><article><DIV><U>example note</U></DIV><DIV><BR></DIV><DIV><B>bold </B><I>italic</I> <I><B>bold &amp; italic</B></I> <STRIKE>strikethrough</STRIKE></DIV><DIV><STRIKE><BR></STRIKE></DIV><DIV><STRIKE><IMG SRC="IMG_1637.JPG"></STRIKE></DIV><DIV><STRIKE><BR></STRIKE></DIV><DIV>It is technically possible to create arbitrary (?) HTML markup via copy &amp; paste from e.g. a browser. Lets not test that for now.</DIV></article></main></body></html>

View file

@ -0,0 +1,2 @@
<!DOCTYPE html>
<html><head><meta charset='utf-8'><meta viewport='width=device-width'><title>mblog</title><link rel='stylesheet' type='text/css' href='style.css'></head><body><header><nav><a href=''>index</a></nav></header><main><h1>mblog</h1><table><tr><td><a href='d81cb91d-c210-46b1-835a-6a7c34db666b'>example note</a></td><td>2024-11-22T11&#183;49+00</td></tr></table></main></body></html>

View file

@ -0,0 +1,13 @@
header, main {
width: 100%;
max-width: 800px;
}
main img {
max-width: 100%;
}
a:link, a:visited {
color: blue;
}