Turn audio into a shareable video. forked from nypublicradio/audiogram

server-test.js 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. var tape = require("tape"),
  2. path = require("path"),
  3. fs = require("fs"),
  4. queue = require("d3").queue,
  5. request = require("supertest");
  6. var fonts = require("../lib/settings/").fonts;
  7. var serverSettings = require("./patch-settings")({
  8. workingDirectory: path.join(__dirname, "tmp", "working"),
  9. maxUploadSize: 100000,
  10. storagePath: path.join(__dirname, "tmp", "storage"),
  11. worker: true,
  12. fonts: fonts
  13. });
  14. var server = require("../server");
  15. var longSample = path.join(__dirname, "data", "glazed-donut.mp3"),
  16. shortSample = path.join(__dirname, "data", "short.mp3");
  17. tape("Server static", function(test) {
  18. request(server)
  19. .get("/")
  20. .expect(200)
  21. .expect("Content-Type", /html/)
  22. .end(function(err, res){
  23. test.error(err);
  24. test.assert(res.text.match(/audiogram/i));
  25. test.end();
  26. });
  27. });
  28. tape("Server static JS", function(test) {
  29. request(server)
  30. .get("/js/bundle.js")
  31. .expect(200)
  32. .end(function(err, res){
  33. test.error(err);
  34. test.end();
  35. });
  36. });
  37. tape("404 1", function(test) {
  38. request(server)
  39. .get("/settings/index.js")
  40. .expect(404)
  41. .end(function(err, res){
  42. test.error(err);
  43. test.end();
  44. });
  45. });
  46. tape("404 2", function(test) {
  47. request(server)
  48. .get("/something.html")
  49. .expect(404)
  50. .end(function(err, res){
  51. test.error(err);
  52. test.end();
  53. });
  54. });
  55. tape("404 3", function(test) {
  56. request(server)
  57. .get("/fonts/something")
  58. .expect(404)
  59. .end(function(err, res){
  60. test.error(err);
  61. test.end();
  62. });
  63. });
  64. tape("Font stylesheet", function(test) {
  65. request(server)
  66. .get("/fonts/fonts.css")
  67. .expect(200)
  68. .expect(/font-face/)
  69. .expect("Content-Type", /css/)
  70. .end(function(err, res){
  71. test.error(err);
  72. test.end();
  73. });
  74. });
  75. tape("Font file", function(test) {
  76. request(server)
  77. .get("/fonts/custom-0.ttf")
  78. .expect(200)
  79. .expect("Content-Type", /ttf/)
  80. .end(function(err, res){
  81. test.error(err);
  82. test.end();
  83. });
  84. });
  85. tape("Server static background", function(test) {
  86. request(server)
  87. .get("/settings/backgrounds/nyc.png")
  88. .expect(200)
  89. .expect("Content-Type", /image/)
  90. .end(function(err, res){
  91. test.error(err);
  92. test.end();
  93. });
  94. });
  95. tape("Max size", function(test) {
  96. request(server)
  97. .post("/submit/")
  98. .attach("audio", longSample)
  99. .field("theme", "{}")
  100. .expect(500)
  101. .end(function(err, res){
  102. test.assert(res.text.match(/uploads are limited/i));
  103. test.end();
  104. });
  105. });
  106. tape("Missing file", function(test) {
  107. request(server)
  108. .post("/submit/")
  109. .type("json")
  110. .field("theme", "{}")
  111. .expect(500)
  112. .end(function(err, res){
  113. test.assert(res.text.match(/audio/i));
  114. test.end();
  115. });
  116. });
  117. tape("Broken settings", function(test) {
  118. request(server)
  119. .post("/submit/")
  120. .type("multipart/form-data")
  121. .field("theme", "a")
  122. .expect(500)
  123. .end(function(err, res){
  124. test.assert(res.text.match(/settings/i));
  125. test.end();
  126. });
  127. });
  128. tape("Successful submission", function(test) {
  129. var jobsFile = path.join(__dirname, "..", ".jobs");
  130. request(server)
  131. .post("/submit/")
  132. .attach("audio", shortSample)
  133. .field("theme", JSON.stringify({ test: true }))
  134. .expect(200)
  135. .end(function(err, res){
  136. var body = JSON.parse(res.text);
  137. test.assert("id" in body);
  138. queue(1)
  139. .defer(fs.readFile, path.join(serverSettings.workingDirectory, body.id, "audio"))
  140. .defer(fs.readFile, path.join(serverSettings.storagePath, "audio", body.id))
  141. .defer(checkStatus, body.id)
  142. .defer(checkJobsFile, body.id)
  143. .await(function(err){
  144. test.error(err);
  145. test.end();
  146. });
  147. });
  148. function checkStatus(id, cb) {
  149. request(server)
  150. .get("/status/" + id + "/")
  151. .expect(200)
  152. .end(function(err, res){
  153. test.equal(JSON.parse(res.text).status, "queued");
  154. cb(err);
  155. });
  156. }
  157. function checkJobsFile(id, cb) {
  158. fs.readFile(jobsFile, "utf8", function(err, raw){
  159. var jobs = JSON.parse(raw);
  160. test.equal(jobs.jobs.pop().id, id);
  161. fs.writeFile(jobsFile, JSON.stringify(jobs), cb);
  162. });
  163. }
  164. });
  165. // Cleanup
  166. tape.onFinish(function(){
  167. require("rimraf")(path.join(__dirname, "tmp"), function(err){
  168. if (err) {
  169. throw err;
  170. }
  171. });
  172. });