Release 2.3.0
A share can now hold a private text (a password, a key, a short note) with its files or on its own. The upload page's new "Private text" card takes up to 100 KB; the browser encrypts the text and sends it through the same chunk pipeline as a file, flagged is_text on share_files, so it gets the share's password, expiry, download limit and cleanup. The recipient sees the text only after pressing "Show text", which counts as their download, so a messenger link preview cannot use up a share limited to one download. The text is left out of the file list, the ZIP and the file counts; the admin dashboard marks shares that hold one with "Text". The website gains a Private text feature card and a fifth phone screenshot; every screenshot is retaken. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
202813a1e6
commit
f9a7839ad3
@@ -175,6 +175,28 @@ test('the settings Save button is end-aligned at less than the form\'s width', f
|
||||
['/admin/settings', '[data-test="save-settings"]'],
|
||||
]);
|
||||
|
||||
test('a recipient reveals a share\'s private text on a phone, and the page has no popovers', function () {
|
||||
$page = ready(visit('/upload'));
|
||||
|
||||
$page->type('[data-test="share-text"]', 'the wifi password is sunflower')
|
||||
->click('[data-test="create-share"]');
|
||||
$page->wait(1);
|
||||
$page->assertSee('Share Created!');
|
||||
|
||||
$shareUrl = $page->script('document.querySelector(\'[data-test="share-link"]\').value');
|
||||
|
||||
$page = ready(visit($shareUrl)->resize(393, 852));
|
||||
|
||||
$page->click('[data-test="show-text"]');
|
||||
$page->wait(1);
|
||||
$page->assertSeeIn('[data-test="shared-text"]', 'the wifi password is sunflower');
|
||||
|
||||
$page
|
||||
->assertScript("document.querySelectorAll('[popover]').length === 0")
|
||||
->assertScript('document.documentElement.scrollWidth <= window.innerWidth')
|
||||
->assertNoJavaScriptErrors();
|
||||
});
|
||||
|
||||
test('the admin dashboard heads its shares list with an h2, both in one card', function () {
|
||||
$admin = User::factory()->admin()->create();
|
||||
Share::factory()->count(2)->create();
|
||||
|
||||
Reference in New Issue
Block a user