Merge branch 'release/0.16.3'

This commit is contained in:
Jonny Barnes 2018-04-12 19:17:13 +01:00
commit d8d604967c
4 changed files with 59 additions and 2 deletions

View file

@ -121,9 +121,8 @@ class FeedsController extends Controller
foreach ($notes as $key => $note) { foreach ($notes as $key => $note) {
$data['items'][$key] = [ $data['items'][$key] = [
'id' => $note->longurl, 'id' => $note->longurl,
'title' => $note->getOriginal('note'),
'url' => $note->longurl, 'url' => $note->longurl,
'content_html' => $note->note, 'content_html' => $note->content,
'date_published' => $note->created_at->tz('UTC')->toRfc3339String(), 'date_published' => $note->created_at->tz('UTC')->toRfc3339String(),
'date_modified' => $note->updated_at->tz('UTC')->toRfc3339String(), 'date_modified' => $note->updated_at->tz('UTC')->toRfc3339String(),
'author' => [ 'author' => [

View file

@ -176,6 +176,37 @@ class Note extends Model
return $modified; return $modified;
} }
/**
* Provide the content_html for JSON feed.
*
* In particular we want to include media links such as images.
*
* @return string
*/
public function getContentAttribute(): string
{
$note = $this->note;
foreach ($this->media as $media) {
if ($media->type == 'image') {
$note .= '<img src="' . $media->url . '" alt="">';
}
if ($media->type == 'audio') {
$note .= '<audio src="' . $media->url . '">';
}
if ($media->type == 'video') {
$note .= '<video src="' . $media->url . '">';
}
}
if ($note === null) {
// when would $note still be blank?
$note = 'A blank note';
}
return $note;
}
/** /**
* Generate the NewBase60 ID from primary ID. * Generate the NewBase60 ID from primary ID.
* *

View file

@ -1,5 +1,8 @@
# Changelog # Changelog
## Version 0.16.3 (2018-04-12)
- Improve JSON feed conformance
## Version 0.16.2 (2018-04-07) ## Version 0.16.2 (2018-04-07)
- Add CORS headers as necessary in the Laravel app (as oppose to using nginx) - Add CORS headers as necessary in the Laravel app (as oppose to using nginx)
- Add CSP headers - Add CSP headers

View file

@ -71,4 +71,28 @@ class FeedsTest extends TestCase
$response = $this->get('/notes/feed.json'); $response = $this->get('/notes/feed.json');
$response->assertHeader('Content-Type', 'application/json'); $response->assertHeader('Content-Type', 'application/json');
} }
/**
* Each JSON feed item must have one of `content_text` or `content_html`,
* and whichever one they have cant be `null`.
*
* @return void
*/
public function test_json_feed_has_one_content_attribute_and_it_isnt_null()
{
$response = $this->get('/notes/feed.json');
$data = json_decode($response->content());
foreach ($data->items as $item) {
$this->assertTrue(
property_exists($item, 'content_text') ||
property_exists($item, 'content_html')
);
if (property_exists($item, 'content_text')) {
$this->assertNotNull($item->content_text);
}
if (property_exists($item, 'content_html')) {
$this->assertNotNull($item->content_html);
}
}
}
} }