350 lines
17 KiB
Java
350 lines
17 KiB
Java
package com.video.analyzer;
|
|
|
|
import com.caliverse.video.global.util.OEmbedFetcher;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
/**
|
|
* OEmbedFetcher 테스트 클래스입니다.
|
|
*
|
|
* 실제 API를 호출하여 oEmbed 데이터를 가져오는 테스트를 수행합니다.
|
|
*/
|
|
public class OEmbedFetcherTest {
|
|
|
|
private OEmbedFetcher oembedFetcher;
|
|
|
|
@Before
|
|
public void setUp() {
|
|
oembedFetcher = new OEmbedFetcher();
|
|
}
|
|
|
|
@Test
|
|
public void testFetchOEmbed_NaverTV() {
|
|
// 네이버TV URL 테스트
|
|
String naverUrl = "https://tv.naver.com/v/40687083";
|
|
|
|
try {
|
|
OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(naverUrl);
|
|
|
|
assertNotNull("응답이 null이 아니어야 합니다", response);
|
|
assertNotNull("타입이 있어야 합니다", response.getType());
|
|
assertNotNull("제목이 있어야 합니다", response.getTitle());
|
|
assertNotNull("제공자 이름이 있어야 합니다", response.getProviderName());
|
|
|
|
// 결과 출력
|
|
System.out.println("=== 네이버TV oEmbed 결과 ===");
|
|
System.out.println("타입: " + response.getType());
|
|
System.out.println("제목: " + response.getTitle());
|
|
System.out.println("작성자: " + response.getAuthorName());
|
|
System.out.println("제공자: " + response.getProviderName());
|
|
System.out.println("썸네일 URL: " + response.getThumbnailUrl());
|
|
System.out.println("썸네일 크기: " + response.getThumbnailWidth() + "x" + response.getThumbnailHeight());
|
|
System.out.println("비디오 크기: " + response.getWidth() + "x" + response.getHeight());
|
|
System.out.println("\n원본 JSON:");
|
|
System.out.println(response.getRawJson());
|
|
|
|
} catch (Exception e) {
|
|
System.err.println("네이버TV oEmbed 테스트 실패: " + e.getMessage());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
// @Test
|
|
// public void testFetchOEmbed_NaverTV() {
|
|
// // 네이버TV URL 테스트
|
|
// String naverUrl = "https://tv.naver.com/v/40687083";
|
|
//
|
|
// try {
|
|
// OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(naverUrl);
|
|
//
|
|
// assertNotNull("응답이 null이 아니어야 합니다", response);
|
|
// assertNotNull("타입이 있어야 합니다", response.getType());
|
|
// assertNotNull("제목이 있어야 합니다", response.getTitle());
|
|
// assertNotNull("제공자 이름이 있어야 합니다", response.getProviderName());
|
|
//
|
|
// // 결과 출력
|
|
// System.out.println("=== 네이버TV oEmbed 결과 ===");
|
|
// System.out.println("타입: " + response.getType());
|
|
// System.out.println("제목: " + response.getTitle());
|
|
// System.out.println("작성자: " + response.getAuthorName());
|
|
// System.out.println("제공자: " + response.getProviderName());
|
|
// System.out.println("썸네일 URL: " + response.getThumbnailUrl());
|
|
// System.out.println("썸네일 크기: " + response.getThumbnailWidth() + "x" + response.getThumbnailHeight());
|
|
// System.out.println("비디오 크기: " + response.getWidth() + "x" + response.getHeight());
|
|
// System.out.println("\n원본 JSON:");
|
|
// System.out.println(response.getRawJson());
|
|
//
|
|
// } catch (Exception e) {
|
|
// System.err.println("네이버TV oEmbed 테스트 실패: " + e.getMessage());
|
|
// e.printStackTrace();
|
|
// }
|
|
// }
|
|
//
|
|
// @Test
|
|
// public void testFetchOEmbed_NaverTVLive() {
|
|
// // 네이버TV URL 테스트
|
|
// String naverUrl = "https://tv.naver.com/l/171651";
|
|
//
|
|
// try {
|
|
// OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(naverUrl);
|
|
//
|
|
// assertNotNull("응답이 null이 아니어야 합니다", response);
|
|
// assertNotNull("타입이 있어야 합니다", response.getType());
|
|
// assertNotNull("제목이 있어야 합니다", response.getTitle());
|
|
// assertNotNull("제공자 이름이 있어야 합니다", response.getProviderName());
|
|
//
|
|
// // 결과 출력
|
|
// System.out.println("=== 네이버TV 라이브 oEmbed 결과 ===");
|
|
// System.out.println("타입: " + response.getType());
|
|
// System.out.println("제목: " + response.getTitle());
|
|
// System.out.println("작성자: " + response.getAuthorName());
|
|
// System.out.println("제공자: " + response.getProviderName());
|
|
// System.out.println("썸네일 URL: " + response.getThumbnailUrl());
|
|
// System.out.println("썸네일 크기: " + response.getThumbnailWidth() + "x" + response.getThumbnailHeight());
|
|
// System.out.println("비디오 크기: " + response.getWidth() + "x" + response.getHeight());
|
|
// System.out.println("\n원본 JSON:");
|
|
// System.out.println(response.getRawJson());
|
|
//
|
|
// } catch (Exception e) {
|
|
// System.err.println("네이버TV 라이브 oEmbed 테스트 실패: " + e.getMessage());
|
|
// e.printStackTrace();
|
|
// }
|
|
// }
|
|
//
|
|
// @Test
|
|
// public void testFetchOEmbed_NaverTVShort() {
|
|
// // 네이버TV 쇼츠 URL 테스트
|
|
// // oEmbed API가 빈 응답을 반환하면 fallback으로 embed URL을 생성합니다.
|
|
// String naverUrl = "https://tv.naver.com/h/87349660";
|
|
//
|
|
// try {
|
|
// OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(naverUrl);
|
|
//
|
|
// // fallback 응답이 생성되어야 함
|
|
// assertNotNull("응답이 null이 아니어야 합니다", response);
|
|
// assertNotNull("타입이 있어야 합니다", response.getType());
|
|
// assertNotNull("제공자 이름이 있어야 합니다", response.getProviderName());
|
|
// assertEquals("타입은 video여야 합니다", "video", response.getType());
|
|
// assertEquals("제공자는 NAVERTV여야 합니다", "NAVERTV", response.getProviderName());
|
|
//
|
|
// // HTML에 embed URL이 포함되어 있어야 함
|
|
// assertNotNull("HTML이 있어야 합니다", response.getHtml());
|
|
// assertTrue("HTML에 embed URL이 포함되어야 합니다",
|
|
// response.getHtml().contains("https://tv.naver.com/embed/87349660"));
|
|
//
|
|
// // 결과 출력
|
|
// System.out.println("=== 네이버TV 쇼츠 oEmbed 결과 (fallback) ===");
|
|
// System.out.println("타입: " + response.getType());
|
|
// System.out.println("제목: " + response.getTitle());
|
|
// System.out.println("작성자: " + response.getAuthorName());
|
|
// System.out.println("제공자: " + response.getProviderName());
|
|
// System.out.println("썸네일 URL: " + response.getThumbnailUrl());
|
|
// System.out.println("썸네일 크기: " + response.getThumbnailWidth() + "x" + response.getThumbnailHeight());
|
|
// System.out.println("비디오 크기: " + response.getWidth() + "x" + response.getHeight());
|
|
// System.out.println("HTML: " + response.getHtml());
|
|
// System.out.println("\n원본 JSON:");
|
|
// System.out.println(response.getRawJson());
|
|
//
|
|
// } catch (Exception e) {
|
|
// System.err.println("네이버TV 쇼츠 oEmbed 테스트 실패: " + e.getMessage());
|
|
// e.printStackTrace();
|
|
// fail("예외가 발생하면 안됩니다: " + e.getMessage());
|
|
// }
|
|
// }
|
|
//
|
|
// @Test
|
|
// public void testFetchOEmbed_NaverTVShare() {
|
|
// // 네이버TV 단축 URL 테스트
|
|
// // naver.me URL은 쇼츠(/h/) 형식으로 리다이렉트되며,
|
|
// // fallback으로 embed URL을 생성합니다.
|
|
// String naverUrl = "https://naver.me/ID3ODX2j";
|
|
//
|
|
// try {
|
|
// OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(naverUrl);
|
|
//
|
|
// // fallback 응답이 생성되어야 함
|
|
// assertNotNull("응답이 null이 아니어야 합니다", response);
|
|
// assertNotNull("타입이 있어야 합니다", response.getType());
|
|
// assertNotNull("제공자 이름이 있어야 합니다", response.getProviderName());
|
|
// assertEquals("타입은 video여야 합니다", "video", response.getType());
|
|
//
|
|
// // 결과 출력
|
|
// System.out.println("=== 네이버TV 공유 oEmbed 결과 ===");
|
|
// System.out.println("타입: " + response.getType());
|
|
// System.out.println("제목: " + response.getTitle());
|
|
// System.out.println("작성자: " + response.getAuthorName());
|
|
// System.out.println("제공자: " + response.getProviderName());
|
|
// System.out.println("썸네일 URL: " + response.getThumbnailUrl());
|
|
// System.out.println("썸네일 크기: " + response.getThumbnailWidth() + "x" + response.getThumbnailHeight());
|
|
// System.out.println("비디오 크기: " + response.getWidth() + "x" + response.getHeight());
|
|
// System.out.println("HTML: " + response.getHtml());
|
|
// System.out.println("\n원본 JSON:");
|
|
// System.out.println(response.getRawJson());
|
|
//
|
|
// } catch (Exception e) {
|
|
// System.err.println("네이버TV 공유 oEmbed 테스트 실패: " + e.getMessage());
|
|
// e.printStackTrace();
|
|
// fail("예외가 발생하면 안됩니다: " + e.getMessage());
|
|
// }
|
|
// }
|
|
//
|
|
// @Test
|
|
// public void testFetchOEmbed_YouTube() {
|
|
// // YouTube URL 테스트
|
|
// String youtubeUrl = "https://www.youtube.com/watch?v=dQw4w9WgXcQ";
|
|
//
|
|
// try {
|
|
// OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(youtubeUrl);
|
|
//
|
|
// assertNotNull("응답이 null이 아니어야 합니다", response);
|
|
// assertNotNull("타입이 있어야 합니다", response.getType());
|
|
// assertNotNull("제목이 있어야 합니다", response.getTitle());
|
|
//
|
|
// // 결과 출력
|
|
// System.out.println("\n=== YouTube oEmbed 결과 ===");
|
|
// System.out.println("타입: " + response.getType());
|
|
// System.out.println("제목: " + response.getTitle());
|
|
// System.out.println("작성자: " + response.getAuthorName());
|
|
// System.out.println("제공자: " + response.getProviderName());
|
|
// System.out.println("썸네일 URL: " + response.getThumbnailUrl());
|
|
// System.out.println("썸네일 크기: " + response.getThumbnailWidth() + "x" + response.getThumbnailHeight());
|
|
// System.out.println("비디오 크기: " + response.getWidth() + "x" + response.getHeight());
|
|
// System.out.println("\n원본 JSON:");
|
|
// System.out.println(response.getRawJson());
|
|
//
|
|
// } catch (Exception e) {
|
|
// System.err.println("YouTube oEmbed 테스트 실패: " + e.getMessage());
|
|
// e.printStackTrace();
|
|
// }
|
|
// }
|
|
//
|
|
// @Test
|
|
// public void testFetchOEmbed_YouTubeShortUrl() {
|
|
// // YouTube 단축 URL 테스트
|
|
// String youtubeShortUrl = "https://youtu.be/dQw4w9WgXcQ";
|
|
//
|
|
// try {
|
|
// OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(youtubeShortUrl);
|
|
//
|
|
// assertNotNull("응답이 null이 아니어야 합니다", response);
|
|
// assertNotNull("타입이 있어야 합니다", response.getType());
|
|
//
|
|
// // 결과 출력
|
|
// System.out.println("\n=== YouTube 단축 URL oEmbed 결과 ===");
|
|
// System.out.println(response);
|
|
//
|
|
// } catch (Exception e) {
|
|
// System.err.println("YouTube 단축 URL oEmbed 테스트 실패: " + e.getMessage());
|
|
// e.printStackTrace();
|
|
// }
|
|
// }
|
|
//
|
|
// @Test
|
|
// public void testFetchOEmbed_Vimeo() {
|
|
// // Vimeo URL 테스트
|
|
// String vimeoUrl = "https://vimeo.com/76979871";
|
|
//
|
|
// try {
|
|
// OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(vimeoUrl);
|
|
//
|
|
// assertNotNull("응답이 null이 아니어야 합니다", response);
|
|
// assertNotNull("타입이 있어야 합니다", response.getType());
|
|
// assertNotNull("제목이 있어야 합니다", response.getTitle());
|
|
//
|
|
// // 결과 출력
|
|
// System.out.println("\n=== Vimeo oEmbed 결과 ===");
|
|
// System.out.println("타입: " + response.getType());
|
|
// System.out.println("제목: " + response.getTitle());
|
|
// System.out.println("작성자: " + response.getAuthorName());
|
|
// System.out.println("제공자: " + response.getProviderName());
|
|
// System.out.println("썸네일 URL: " + response.getThumbnailUrl());
|
|
// System.out.println("썸네일 크기: " + response.getThumbnailWidth() + "x" + response.getThumbnailHeight());
|
|
// System.out.println("비디오 크기: " + response.getWidth() + "x" + response.getHeight());
|
|
// System.out.println("\n원본 JSON:");
|
|
// System.out.println(response.getRawJson());
|
|
//
|
|
// } catch (Exception e) {
|
|
// System.err.println("Vimeo oEmbed 테스트 실패: " + e.getMessage());
|
|
// e.printStackTrace();
|
|
// }
|
|
// }
|
|
//
|
|
// @Test
|
|
// public void testFetchOEmbed_UnsupportedPlatform() {
|
|
// // 지원하지 않는 플랫폼 테스트
|
|
// String unsupportedUrl = "https://example.com/video";
|
|
//
|
|
// try {
|
|
// oembedFetcher.fetchOEmbedData(unsupportedUrl);
|
|
// fail("지원하지 않는 플랫폼에 대해 예외가 발생해야 합니다");
|
|
// } catch (IllegalArgumentException e) {
|
|
// // 예상된 예외
|
|
// assertTrue("지원하지 않는 플랫폼 메시지를 포함해야 합니다",
|
|
// e.getMessage().contains("지원하지 않는 플랫폼"));
|
|
// System.out.println("\n지원하지 않는 플랫폼 예외 처리 확인: " + e.getMessage());
|
|
// } catch (Exception e) {
|
|
// fail("IllegalArgumentException이 발생해야 합니다: " + e.getClass().getName());
|
|
// }
|
|
// }
|
|
//
|
|
// @Test
|
|
// public void testFetchOEmbed_MultipleNaverTVVideos() {
|
|
// // 여러 네이버TV URL 테스트
|
|
// String[] naverUrls = {
|
|
// "https://tv.naver.com/v/40687083",
|
|
// "https://tv.naver.com/v/84373511",
|
|
// "https://tv.naver.com/v/12345678" // 존재하지 않을 수 있는 URL
|
|
// };
|
|
//
|
|
// System.out.println("\n=== 여러 네이버TV URL 테스트 ===");
|
|
// for (String url : naverUrls) {
|
|
// try {
|
|
// OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(url);
|
|
// System.out.println("\nURL: " + url);
|
|
// System.out.println("제목: " + response.getTitle());
|
|
// System.out.println("작성자: " + response.getAuthorName());
|
|
// System.out.println("썸네일: " + response.getThumbnailUrl());
|
|
// System.out.println("성공!");
|
|
// } catch (Exception e) {
|
|
// System.err.println("\nURL: " + url);
|
|
// System.err.println("실패: " + e.getMessage());
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
@Test
|
|
public void testOEmbedResponse_AllFields() {
|
|
// 네이버TV URL로 모든 필드 확인
|
|
String naverUrl = "https://tv.naver.com/v/40687083";
|
|
|
|
try {
|
|
OEmbedFetcher.OEmbedResponse response = oembedFetcher.fetchOEmbedData(naverUrl);
|
|
|
|
System.out.println("\n=== oEmbed 응답 모든 필드 확인 ===");
|
|
System.out.println("Type: " + response.getType());
|
|
System.out.println("Version: " + response.getVersion());
|
|
System.out.println("Title: " + response.getTitle());
|
|
System.out.println("Author Name: " + response.getAuthorName());
|
|
System.out.println("Author URL: " + response.getAuthorUrl());
|
|
System.out.println("Provider Name: " + response.getProviderName());
|
|
System.out.println("Provider URL: " + response.getProviderUrl());
|
|
System.out.println("Thumbnail URL: " + response.getThumbnailUrl());
|
|
System.out.println("Thumbnail Width: " + response.getThumbnailWidth());
|
|
System.out.println("Thumbnail Height: " + response.getThumbnailHeight());
|
|
System.out.println("Width: " + response.getWidth());
|
|
System.out.println("Height: " + response.getHeight());
|
|
System.out.println("HTML: " + (response.getHtml() != null ? response.getHtml().substring(0, Math.min(100, response.getHtml().length())) + "..." : "null"));
|
|
|
|
// 필수 필드 확인
|
|
assertNotNull("Title은 null이 아니어야 합니다", response.getTitle());
|
|
assertNotNull("Provider Name은 null이 아니어야 합니다", response.getProviderName());
|
|
|
|
} catch (Exception e) {
|
|
System.err.println("테스트 실패: " + e.getMessage());
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|