From ca8fbda5d031b9671447445a83acac96b4fab2fb Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 8 Feb 2024 20:13:44 +0100 Subject: [PATCH] Add end-to-end test for OCR in media uploads (#29148) --- .../compose/components/upload_button.jsx | 1 + spec/fixtures/files/text.png | Bin 0 -> 16219 bytes spec/system/ocr_spec.rb | 33 ++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 spec/fixtures/files/text.png create mode 100644 spec/system/ocr_spec.rb diff --git a/app/javascript/mastodon/features/compose/components/upload_button.jsx b/app/javascript/mastodon/features/compose/components/upload_button.jsx index 3866f239d..50c9ad632 100644 --- a/app/javascript/mastodon/features/compose/components/upload_button.jsx +++ b/app/javascript/mastodon/features/compose/components/upload_button.jsx @@ -65,6 +65,7 @@ class UploadButton extends ImmutablePureComponent { key={resetFileKey} ref={this.setRef} type='file' + name='file-upload-input' multiple accept={acceptContentTypes.toArray().join(',')} onChange={this.handleChange} diff --git a/spec/fixtures/files/text.png b/spec/fixtures/files/text.png new file mode 100644 index 0000000000000000000000000000000000000000..7463b54fd558938e4c59e71f5a90027692c28d7f GIT binary patch literal 16219 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 qh?~VWeEB}w