diff --git a/test/body.js b/test/body.js new file mode 100644 index 0000000..b6ace7b --- /dev/null +++ b/test/body.js @@ -0,0 +1,19 @@ +const tap = require("tap") +const constants = require("../src/lib/constants") +const {extractSharedData} = require("../src/lib/utils/body") +const fs = require("fs").promises + +tap.test("extract shared data", async childTest => { + childTest.throws(() => extractSharedData(""), constants.symbols.NO_SHARED_DATA, "not found in blank") + { + const page = await fs.readFile("test/files/page-user-instagram.html", "utf8") + const sharedData = extractSharedData(page) + childTest.equal(sharedData.entry_data.ProfilePage[0].graphql.user.username, "instagram", "can extract user page") + } + { + const page = await fs.readFile("test/files/page-login.html", "utf8") + const sharedData = extractSharedData(page) + childTest.true(sharedData.entry_data.LoginAndSignupPage[0], "can extract login page") + } + childTest.end() +}) diff --git a/test/files/page-login.html b/test/files/page-login.html new file mode 100644 index 0000000..3eeb42e --- /dev/null +++ b/test/files/page-login.html @@ -0,0 +1,330 @@ + + + + + + + +Login • Instagram + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/files/page-user-instagram.html b/test/files/page-user-instagram.html new file mode 100644 index 0000000..86bc9ee --- /dev/null +++ b/test/files/page-user-instagram.html @@ -0,0 +1,345 @@ + + + + + + + +Instagram (@instagram) • Instagram photos and videos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/proxyurl.js b/test/proxyurl.js new file mode 100644 index 0000000..cad85e9 --- /dev/null +++ b/test/proxyurl.js @@ -0,0 +1,42 @@ +const tap = require("tap") +const {proxyImage, proxyVideo, proxyExtendedOwner} = require("../src/lib/utils/proxyurl") + +tap.equal( + proxyImage("https://scontent-syd2-1.cdninstagram.com/v/t51.2885-15/e35/p1080x1080/83429487_106792960779790_3699017977444758529_n.jpg?_nc_ht=scontent-syd2-1.cdninstagram.com&_nc_cat=1&_nc_ohc=YYmv6lkrblAAX_9u9Kt&oh=81a70f2b92e70873b5ebc9253e7df937&oe=5EBC230A"), + "/imageproxy?url=https%3A%2F%2Fscontent-syd2-1.cdninstagram.com%2Fv%2Ft51.2885-15%2Fe35%2Fp1080x1080%2F83429487_106792960779790_3699017977444758529_n.jpg%3F_nc_ht%3Dscontent-syd2-1.cdninstagram.com%26_nc_cat%3D1%26_nc_ohc%3DYYmv6lkrblAAX_9u9Kt%26oh%3D81a70f2b92e70873b5ebc9253e7df937%26oe%3D5EBC230A", + "image is proxied" +) + +tap.equal( + proxyVideo("https://scontent-syd2-1.cdninstagram.com/v/t50.2886-16/85299832_745217319218455_3874701039913515731_n.mp4?_nc_ht=scontent-syd2-1.cdninstagram.com&_nc_cat=107&_nc_ohc=_Em8_pb3RUIAX8S8tUh&oe=5E3CB718&oh=61d15c21a279f618bab0c5df335635cc"), + "/videoproxy?url=https%3A%2F%2Fscontent-syd2-1.cdninstagram.com%2Fv%2Ft50.2886-16%2F85299832_745217319218455_3874701039913515731_n.mp4%3F_nc_ht%3Dscontent-syd2-1.cdninstagram.com%26_nc_cat%3D107%26_nc_ohc%3D_Em8_pb3RUIAX8S8tUh%26oe%3D5E3CB718%26oh%3D61d15c21a279f618bab0c5df335635cc", + "video is proxied" +) + +tap.test("proxy extended owner", childTest => { + const originalProfilePicURL = "https://scontent-syd2-1.cdninstagram.com/v/t51.2885-19/s150x150/59381178_2348911458724961_5863612957363011584_n.jpg?_nc_ht=scontent-syd2-1.cdninstagram.com&_nc_ohc=TrMM-1zPSA4AX857GJB&oh=15b843b0c1033784492b64b1170cd048&oe=5EC9125D" + const owner = { + id: "25025320", + username: "instagram", + is_verified: true, + full_name: "Instagram", + profile_pic_url: originalProfilePicURL + } + childTest.same( + proxyExtendedOwner(owner), + { + id: "25025320", + username: "instagram", + is_verified: true, + full_name: "Instagram", + profile_pic_url: "/imageproxy?url=https%3A%2F%2Fscontent-syd2-1.cdninstagram.com%2Fv%2Ft51.2885-19%2Fs150x150%2F59381178_2348911458724961_5863612957363011584_n.jpg%3F_nc_ht%3Dscontent-syd2-1.cdninstagram.com%26_nc_ohc%3DTrMM-1zPSA4AX857GJB%26oh%3D15b843b0c1033784492b64b1170cd048%26oe%3D5EC9125D" + }, + "owner was proxied" + ) + childTest.equal( + owner.profile_pic_url, + originalProfilePicURL, + "original owner was not modified" + ) + childTest.end() +}) diff --git a/test/structuretext.js b/test/structuretext.js index 3e935c6..82b3355 100644 --- a/test/structuretext.js +++ b/test/structuretext.js @@ -12,7 +12,8 @@ tap.same( {type: "text", text: " "}, {type: "hashtag", text: "#epic", hashtag: "epic"}, {type: "text", text: ""} - ] + ], + "partsHashtag works" ) // lone test username @@ -26,97 +27,110 @@ tap.same( {type: "text", text: " with "}, {type: "user", text: "@person", user: "person"}, {type: "text", text: ""} - ] + ], + "partsUsername works" ) -// plain text -tap.same( - structure("hello world"), - [ - {type: "text", text: "hello world"} - ] -) +tap.test("entire structure works", childTest => { + // plain text + childTest.same( + structure("hello world"), + [ + {type: "text", text: "hello world"} + ], + "plain text" + ) -// username -tap.same( - structure("hello @person world"), - [ - {type: "text", text: "hello "}, - {type: "user", text: "@person", user: "person"}, - {type: "text", text: " world"} - ] -) + // username + childTest.same( + structure("hello @person world"), + [ + {type: "text", text: "hello "}, + {type: "user", text: "@person", user: "person"}, + {type: "text", text: " world"} + ], + "username" + ) -// username at start -tap.same( - structure("@person hello"), - [ - {type: "text", text: ""}, - {type: "user", text: "@person", user: "person"}, - {type: "text", text: " hello"} - ] -) + // username at start + childTest.same( + structure("@person hello"), + [ + {type: "text", text: ""}, + {type: "user", text: "@person", user: "person"}, + {type: "text", text: " hello"} + ], + "username at start" + ) -// username at end -tap.same( - structure("hello @person"), - [ - {type: "text", text: "hello "}, - {type: "user", text: "@person", user: "person"}, - {type: "text", text: ""}, - ] -) + // username at end + childTest.same( + structure("hello @person"), + [ + {type: "text", text: "hello "}, + {type: "user", text: "@person", user: "person"}, + {type: "text", text: ""}, + ], + "username at end" + ) -// multiple usernames -tap.same( - structure("hello @person1 @person2"), - [ - {type: "text", text: "hello "}, - {type: "user", text: "@person1", user: "person1"}, - {type: "text", text: " "}, - {type: "user", text: "@person2", user: "person2"}, - {type: "text", text: ""} - ] -) + // multiple usernames + childTest.same( + structure("hello @person1 @person2"), + [ + {type: "text", text: "hello "}, + {type: "user", text: "@person1", user: "person1"}, + {type: "text", text: " "}, + {type: "user", text: "@person2", user: "person2"}, + {type: "text", text: ""} + ], + "multiple usernames" + ) -// hashtag -tap.same( - structure("what a #beautiful day"), - [ - {type: "text", text: "what a "}, - {type: "hashtag", text: "#beautiful", hashtag: "beautiful"}, - {type: "text", text: " day"} - ] -) + // hashtag + childTest.same( + structure("what a #beautiful day"), + [ + {type: "text", text: "what a "}, + {type: "hashtag", text: "#beautiful", hashtag: "beautiful"}, + {type: "text", text: " day"} + ], + "hashtag" + ) -// mixed -tap.same( - structure("@person what a #beautiful #day in @city"), - [ - {type: "text", text: ""}, - {type: "user", text: "@person", user: "person"}, - {type: "text", text: " what a "}, - {type: "hashtag", text: "#beautiful", hashtag: "beautiful"}, - {type: "text", text: " "}, - {type: "hashtag", text: "#day", hashtag: "day"}, - {type: "text", text: " in "}, - {type: "user", text: "@city", user: "city"}, - {type: "text", text: ""} - ] -) + // mixed + childTest.same( + structure("@person what a #beautiful #day in @city"), + [ + {type: "text", text: ""}, + {type: "user", text: "@person", user: "person"}, + {type: "text", text: " what a "}, + {type: "hashtag", text: "#beautiful", hashtag: "beautiful"}, + {type: "text", text: " "}, + {type: "hashtag", text: "#day", hashtag: "day"}, + {type: "text", text: " in "}, + {type: "user", text: "@city", user: "city"}, + {type: "text", text: ""} + ], + "mixed" + ) -// special characters -tap.same( - structure("#goodmorning! @city.planner, #parks\nare awesome"), - [ - {type: "text", text: ""}, - {type: "hashtag", text: "#goodmorning", hashtag: "goodmorning"}, - {type: "text", text: "! "}, - {type: "user", text: "@city.planner", user: "city.planner"}, - {type: "text", text: ", "}, - {type: "hashtag", text: "#parks", hashtag: "parks"}, - {type: "text", text: "\nare awesome"} - ] -) + // special characters + childTest.same( + structure("#goodmorning! @city.planner, #parks\nare awesome"), + [ + {type: "text", text: ""}, + {type: "hashtag", text: "#goodmorning", hashtag: "goodmorning"}, + {type: "text", text: "! "}, + {type: "user", text: "@city.planner", user: "city.planner"}, + {type: "text", text: ", "}, + {type: "hashtag", text: "#parks", hashtag: "parks"}, + {type: "text", text: "\nare awesome"} + ], + "special characters" + ) + + childTest.end() +})