Skip to content

Commit

Permalink
Issue #1091 - OEmbed support
Browse files Browse the repository at this point in the history
  • Loading branch information
nbartels committed Aug 30, 2020
1 parent 5ba9531 commit c0e0e7e
Show file tree
Hide file tree
Showing 8 changed files with 315 additions and 0 deletions.
88 changes: 88 additions & 0 deletions src/main/lombok/com/restfb/types/oembed/BaseOEmbed.java
@@ -0,0 +1,88 @@
/*
* Copyright (c) 2010-2020 Mark Allen, Norbert Bartels.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.restfb.types.oembed;

import com.restfb.Facebook;
import com.restfb.types.AbstractFacebookType;

import lombok.Getter;
import lombok.Setter;

public abstract class BaseOEmbed extends AbstractFacebookType {

/**
* The HTML used to display the page.
*/
@Getter
@Setter
@Facebook
private String html;

/**
* The height in pixels required to display the HTML.
*/
@Getter
@Setter
@Facebook
private Long height;

/**
* The width in pixels required to display the HTML.
*/
@Getter
@Setter
@Facebook
private Long width;

/**
* Name of the provider (Facebook)
*/
@Getter
@Setter
@Facebook("provider_name")
private String providerName;

/**
* URL of the provider (Facebook)
*/
@Getter
@Setter
@Facebook("provider_url")
private String providerUrl;

/**
* The oEmbed resource type. See https://oembed.com/.
*/
@Getter
@Setter
@Facebook
private String type;

/**
* Always 1.0. See https://oembed.com/
*/
@Getter
@Setter
@Facebook
private String version;

}
31 changes: 31 additions & 0 deletions src/main/lombok/com/restfb/types/oembed/OEmbedPage.java
@@ -0,0 +1,31 @@
/*
* Copyright (c) 2010-2020 Mark Allen, Norbert Bartels.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.restfb.types.oembed;

import com.restfb.types.AbstractFacebookType;

/**
* Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/oembed-page/">OEmbed Page type</a>
*/
public class OEmbedPage extends BaseOEmbed {

}
48 changes: 48 additions & 0 deletions src/main/lombok/com/restfb/types/oembed/OEmbedPost.java
@@ -0,0 +1,48 @@
/*
* Copyright (c) 2010-2020 Mark Allen, Norbert Bartels.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.restfb.types.oembed;

import com.restfb.Facebook;
import lombok.Getter;
import lombok.Setter;

/**
* Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/oembed-post/">OEmbed Post type</a>
*/
public class OEmbedPost extends BaseOEmbed {

/**
* The name of the Facebook user that owns the post.
*/
@Getter
@Setter
@Facebook("author_name")
private String authorName;

/**
* A URL for the author/owner of the post.
*/
@Getter
@Setter
@Facebook("author_url")
private String authorUrl;
}
50 changes: 50 additions & 0 deletions src/main/lombok/com/restfb/types/oembed/OEmbedVideo.java
@@ -0,0 +1,50 @@
/*
* Copyright (c) 2010-2020 Mark Allen, Norbert Bartels.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.restfb.types.oembed;

import com.restfb.Facebook;

import lombok.Getter;
import lombok.Setter;

/**
* Represents the <a href="https://developers.facebook.com/docs/graph-api/reference/oembed-video/">OEmbed Video type</a>
*/
public class OEmbedVideo extends BaseOEmbed {

/**
* The name of the Facebook user that owns the video.
*/
@Getter
@Setter
@Facebook("author_name")
private String authorName;

/**
* A URL for the author/owner of the video.
*/
@Getter
@Setter
@Facebook("author_url")
private String authorUrl;

}
68 changes: 68 additions & 0 deletions src/test/java/com/restfb/types/oembed/OembedTest.java
@@ -0,0 +1,68 @@
/*
* Copyright (c) 2010-2020 Mark Allen, Norbert Bartels.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.restfb.types.oembed;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

import org.junit.jupiter.api.Test;

import com.restfb.AbstractJsonMapperTests;

public class OembedTest extends AbstractJsonMapperTests {

@Test
void oembedPage() {
OEmbedPage page = createJsonMapper().toJavaObject(jsonFromClasspath("v8_0/oembed_page"), OEmbedPage.class);
baseOEmbedChecks(page);
assertEquals(340, page.getWidth());
assertEquals(500, page.getHeight());
}

@Test
void oembedPost() {
OEmbedPost post = createJsonMapper().toJavaObject(jsonFromClasspath("v8_0/oembed_post"), OEmbedPost.class);
baseOEmbedChecks(post);
assertEquals(552, post.getWidth());
assertEquals("Test Page", post.getAuthorName());
assertEquals("https://www.facebook.com/123456789", post.getAuthorUrl());
}

@Test
void oembedVideo() {
OEmbedVideo video = createJsonMapper().toJavaObject(jsonFromClasspath("v8_0/oembed_video"), OEmbedVideo.class);
baseOEmbedChecks(video);
assertEquals(552, video.getWidth());
assertEquals(893, video.getHeight());
assertEquals("Test Page", video.getAuthorName());
assertEquals("https://www.facebook.com/123456789", video.getAuthorUrl());
}

private void baseOEmbedChecks(BaseOEmbed embed) {
assertNotNull(embed);
assertEquals("Facebook", embed.getProviderName());
assertEquals("https://www.facebook.com", embed.getProviderUrl());
assertEquals("rich", embed.getType());
assertEquals("1.0", embed.getVersion());
assertEquals("<div id=\"fb-root\">SOME HTML STUFF</div>", embed.getHtml());
}
}
9 changes: 9 additions & 0 deletions src/test/resources/json/v8_0/oembed_page.json
@@ -0,0 +1,9 @@
{
"provider_url": "https://www.facebook.com",
"provider_name": "Facebook",
"height": 500,
"html": "<div id=\"fb-root\">SOME HTML Stuff</div>",
"type": "rich",
"version": "1.0",
"width": 340
}
10 changes: 10 additions & 0 deletions src/test/resources/json/v8_0/oembed_post.json
@@ -0,0 +1,10 @@
{
"author_name": "Test Page",
"author_url": "https://www.facebook.com/123456789",
"provider_url": "https://www.facebook.com",
"provider_name": "Facebook",
"html": "<div id=\"fb-root\">SOME HTML STUFF</div>",
"type": "rich",
"version": "1.0",
"width": 552
}
11 changes: 11 additions & 0 deletions src/test/resources/json/v8_0/oembed_video.json
@@ -0,0 +1,11 @@
{
"author_name": "Test Page",
"author_url": "https://www.facebook.com/123456789",
"provider_url": "https://www.facebook.com",
"provider_name": "Facebook",
"html": "<div id=\"fb-root\">SOME HTML STUFF</div>",
"type": "rich",
"version": "1.0",
"height": 893,
"width": 552
}

0 comments on commit c0e0e7e

Please sign in to comment.