FEATURE: pasting a link into the title of the composer can automatically onebox it and update the title

This commit is contained in:
Neil Lalonde
2016-12-08 16:08:44 -05:00
parent a9acced4ca
commit fbd8e6ed4a
9 changed files with 158 additions and 10 deletions

View File

@ -0,0 +1,42 @@
import { acceptance } from "helpers/qunit-helpers";
acceptance("Composer topic featured links", {
loggedIn: true,
settings: {
topic_featured_link_enabled: true
}
});
test("onebox with title", () => {
visit("/");
click('#create-topic');
fillIn('#reply-title', "http://www.example.com/has-title.html");
andThen(() => {
ok(find('.d-editor-preview').html().trim().indexOf('onebox') > 0, "it pastes the link into the body and previews it");
ok(exists('.d-editor-textarea-wrapper .popup-tip.good'), 'the body is now good');
equal(find('.title-input input').val(), "An interesting article", "title is from the oneboxed article");
});
});
test("onebox result doesn't include a title", () => {
visit("/");
click('#create-topic');
fillIn('#reply-title', 'http://www.example.com/no-title.html');
andThen(() => {
ok(find('.d-editor-preview').html().trim().indexOf('onebox') > 0, "it pastes the link into the body and previews it");
ok(exists('.d-editor-textarea-wrapper .popup-tip.good'), 'the body is now good');
equal(find('.title-input input').val(), "no-title.html", "title is from the end of the url");
});
});
test("no onebox result", () => {
visit("/");
click('#create-topic');
fillIn('#reply-title', "http://www.example.com/nope-onebox.html");
andThen(() => {
equal(find('.d-editor-preview').html().trim().indexOf('onebox'), -1, "link isn't put into the post");
equal(find('.d-editor-input').val().length, 0, "link isn't put into the post");
equal(find('.title-input input').val(), "http://www.example.com/nope-onebox.html", "title is unchanged");
});
});

View File

@ -320,6 +320,26 @@ export default function() {
this.delete('/admin/users/:user_id/revoke_api_key', success);
this.post('/admin/badges', success);
this.delete('/admin/badges/:id', success);
this.get('/onebox', request => {
if (request.queryParams.url === 'http://www.example.com/has-title.html') {
return [
200,
{"Content-Type": "application/html"},
'<aside class="onebox"><article class="onebox-body"><h3><a href="http://www.example.com/article.html">An interesting article</a></h3></article></aside>'
];
}
if (request.queryParams.url === 'http://www.example.com/no-title.html') {
return [
200,
{"Content-Type": "application/html"},
'<aside class="onebox"><article class="onebox-body"><p>No title</p></article></aside>'
];
}
return [404, {"Content-Type": "application/html"}, ''];;
});
});
server.prepareBody = function(body){

View File

@ -231,3 +231,19 @@ test("Title length for static page topics as admin", function() {
composer.set('title', '');
ok(!composer.get('titleLengthValid'), "admins must set title to at least 1 character");
});
test("title placeholder depends on what you're doing", function() {
let composer = createComposer({action: Composer.CREATE_TOPIC});
equal(composer.get('titlePlaceholder'), 'composer.title_placeholder', "placeholder for normal topic");
composer = createComposer({action: Composer.PRIVATE_MESSAGE});
equal(composer.get('titlePlaceholder'), 'composer.title_placeholder', "placeholder for private message");
Discourse.SiteSettings.topic_featured_link_enabled = true;
composer = createComposer({action: Composer.CREATE_TOPIC});
equal(composer.get('titlePlaceholder'), 'composer.title_or_link_placeholder', "placeholder invites you to paste a link");
composer = createComposer({action: Composer.PRIVATE_MESSAGE});
equal(composer.get('titlePlaceholder'), 'composer.title_placeholder', "placeholder for private message with topic links enabled");
});