Files
url-analyzer/backup/src/test/java/com/video/analyzer/OEmbedFetcherTest.java
2025-11-28 15:58:57 +09:00

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();
}
}
}