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

server-test.js 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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("Content-Type", /css/)
  69. .end(function(err, res){
  70. test.error(err);
  71. test.end();
  72. });
  73. });
  74. tape("Font file", function(test) {
  75. request(server)
  76. .get("/fonts/custom-0.ttf")
  77. .expect(200)
  78. .expect("Content-Type", /ttf/)
  79. .end(function(err, res){
  80. test.error(err);
  81. test.end();
  82. });
  83. });
  84. tape("Server static background", function(test) {
  85. request(server)
  86. .get("/settings/backgrounds/nyc.png")
  87. .expect(200)
  88. .expect("Content-Type", /image/)
  89. .end(function(err, res){
  90. test.error(err);
  91. test.end();
  92. });
  93. });
  94. tape("Max size", function(test) {
  95. request(server)
  96. .post("/submit/")
  97. .attach("audio", longSample)
  98. .field("theme", "{}")
  99. .expect(500)
  100. .end(function(err, res){
  101. test.assert(res.text.match(/uploads are limited/i));
  102. test.end();
  103. });
  104. });
  105. tape("Missing file", function(test) {
  106. request(server)
  107. .post("/submit/")
  108. .type("json")
  109. .field("theme", "{}")
  110. .expect(500)
  111. .end(function(err, res){
  112. test.assert(res.text.match(/audio/i));
  113. test.end();
  114. });
  115. });
  116. tape("Broken settings", function(test) {
  117. request(server)
  118. .post("/submit/")
  119. .type("multipart/form-data")
  120. .field("theme", "a")
  121. .expect(500)
  122. .end(function(err, res){
  123. test.assert(res.text.match(/settings/i));
  124. test.end();
  125. });
  126. });
  127. tape("Successful submission", function(test) {
  128. var jobsFile = path.join(__dirname, "..", ".jobs");
  129. request(server)
  130. .post("/submit/")
  131. .attach("audio", shortSample)
  132. .field("theme", JSON.stringify({ test: true }))
  133. .expect(200)
  134. .end(function(err, res){
  135. var body = JSON.parse(res.text);
  136. test.assert("id" in body);
  137. queue(1)
  138. .defer(fs.readFile, path.join(serverSettings.workingDirectory, body.id, "audio"))
  139. .defer(fs.readFile, path.join(serverSettings.storagePath, "audio", body.id))
  140. .defer(checkStatus, body.id)
  141. .defer(checkJobsFile, body.id)
  142. .await(function(err){
  143. test.error(err);
  144. test.end();
  145. });
  146. });
  147. function checkStatus(id, cb) {
  148. request(server)
  149. .get("/status/" + id + "/")
  150. .expect(200)
  151. .end(function(err, res){
  152. test.equal(JSON.parse(res.text).status, "queued");
  153. cb(err);
  154. });
  155. }
  156. function checkJobsFile(id, cb) {
  157. fs.readFile(jobsFile, "utf8", function(err, raw){
  158. var jobs = JSON.parse(raw);
  159. test.equal(jobs.jobs.pop().id, id);
  160. fs.writeFile(jobsFile, JSON.stringify(jobs), cb);
  161. });
  162. }
  163. });
  164. // Cleanup
  165. tape.onFinish(function(){
  166. require("rimraf")(path.join(__dirname, "tmp"), function(err){
  167. if (err) {
  168. throw err;
  169. }
  170. });
  171. });