Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. describe("filmStudio", function () {
  2.     let testClass;
  3.     let fakeClass;
  4.     describe("Class Initialization With Right Params", function () {
  5.         it("should initialize properly", function () {
  6.             testClass = new FilmStudio("FOX");
  7.             fakeClass = new exploit("FOX");
  8.             assert.deepEqual(testClass, fakeClass);
  9.         })
  10.     });
  11.     describe("Make Movie", function () {
  12.         beforeEach(function () {
  13.             testClass = new FilmStudio("FOX");
  14.             fakeClass = new exploit("FOX");
  15.         });
  16.         it("should make one movie", function () {
  17.             let output = testClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  18.             let output2 = fakeClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  19.             assert.deepEqual(output, output2);
  20.         });
  21.         it("should work with sequels", function () {
  22.             testClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  23.             fakeClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  24.             let output = testClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Thanos']);
  25.             let output2 = fakeClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Thanos']);
  26.             assert.deepEqual(output, output2);
  27.         });
  28.         it("should work with different movies", function () {
  29.             testClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  30.             fakeClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  31.             testClass.makeMovie('New Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Thanos']);
  32.             fakeClass.makeMovie('New Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Thanos']);
  33.             assert.deepEqual(testClass, fakeClass);
  34.         });
  35.         it("should throw with invalid args count", function () {
  36.             let testCase = () => { testClass.makeMovie("It", "should", "throw"); };
  37.             expect(testCase).to.throw("Invalid arguments count");
  38.         });
  39.         it("should throw invalid args", function () {
  40.             let testCase = () => { testClass.makeMovie('The Avengers', "Not Array"); }
  41.             expect(testCase).to.throw("Invalid arguments");
  42.         });
  43.     });
  44.     describe("Casting", function () {
  45.         beforeEach(function () {
  46.             testClass = new FilmStudio("FOX");
  47.             fakeClass = new exploit("FOX");
  48.         });
  49.         it("should work", function () {
  50.             testClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  51.             fakeClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  52.             let output = testClass.casting("RDJ", "Iron-Man");
  53.             let output2 = fakeClass.casting("RDJ", "Iron-Man");
  54.             expect(output).to.equal(output2);
  55.         });
  56.         it("should work with a non-existing role", function () {
  57.             testClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  58.             fakeClass.makeMovie('The Avengers', ['Iron-Man', 'Thor', 'Hulk', 'Arrow guy']);
  59.             let output = testClass.casting("RDJ", "Iron Man");
  60.             let output2 = fakeClass.casting("RDJ", "Iron Man");
  61.             expect(output).to.equal(output2);
  62.         });
  63.         it("should work with no movies", function () {
  64.             let output = testClass.casting("RDJ", "Iron Man");
  65.             let output2 = fakeClass.casting("RDJ", "Iron Man");
  66.             expect(output).to.equal(output2);
  67.         });
  68.     });
  69.     describe("Look for producer", function () {
  70.         beforeEach(function () {
  71.             testClass = new FilmStudio("FOX");
  72.             fakeClass = new exploit("FOX");
  73.             testClass.makeMovie('The Avengers', ['Iron-Man', 'Thor']);
  74.             fakeClass.makeMovie('The Avengers', ['Iron-Man', 'Thor']);
  75.         });
  76.         it("should return the correct output", function () {
  77.             testClass.casting("RDJ", "Iron-Man");
  78.             fakeClass.casting("RDJ", "Iron-Man");
  79.             testClass.casting("CH", "Thor");
  80.             fakeClass.casting("CH", "Thor");
  81.             let output = testClass.lookForProducer("The Avengers");
  82.             let output2 = fakeClass.lookForProducer("The Avengers");
  83.             expect(output).to.equal(output2);
  84.         });
  85.         it("should return without cast", function () {
  86.             let output = testClass.lookForProducer("The Avengers");
  87.             let output2 = fakeClass.lookForProducer("The Avengers");
  88.             expect(output).to.equal(output2);
  89.         });
  90.         it("should throw", function () {
  91.             testClass.casting("RDJ", "Iron-Man");
  92.             testClass.casting("CH", "Thor");
  93.             let testCase = () => { testClass.lookForProducer("Avengers") };
  94.             expect(testCase).to.throw(`Avengers do not exist yet, but we need the money...`);
  95.         });
  96.     })
  97.     class exploit {
  98.  
  99.         constructor(studioName) {
  100.             this.name = studioName;
  101.             this.films = [];
  102.         }
  103.  
  104.         casting(actor, role) {
  105.             let isTheActorIsUnemployed = true;
  106.             let output;
  107.  
  108.             if (this.films.length) {
  109.  
  110.                 for (let f of this.films) {
  111.  
  112.                     let roles = f.filmRoles.filter((r) => r.role === role);
  113.  
  114.                     if (roles.length) {
  115.                         let filmIndex = this.films.indexOf(f);
  116.                         let wantedRole = this.films[filmIndex].filmRoles.filter((fR) => fR.role === role)[0];
  117.                         let roleIndex = this.films[filmIndex].filmRoles.indexOf(wantedRole);
  118.  
  119.                         this.films[filmIndex].filmRoles[roleIndex].actor = actor;
  120.                         isTheActorIsUnemployed = false;
  121.                         output = `You got the job! Mr. ${actor} you are next ${role} in the ${f.filmName}. Congratz!`;
  122.                         break;
  123.                     }
  124.                 }
  125.  
  126.                 if (isTheActorIsUnemployed) {
  127.                     output = `${actor}, we cannot find a ${role} role...`;
  128.                 }
  129.  
  130.             } else {
  131.                 output = `There are no films yet in ${this.name}.`;
  132.             }
  133.  
  134.             return output;
  135.         }
  136.  
  137.         makeMovie(filmName, roles) {
  138.  
  139.             if (arguments.length === 2) {
  140.  
  141.                 let firstArgIsString = typeof arguments[0] === 'string';
  142.                 let secondArgIsArray = arguments[1] instanceof Array;
  143.  
  144.                 if (firstArgIsString && secondArgIsArray) {
  145.                     let findedFilms = this.films.filter((f) => f.filmName.includes(filmName));
  146.  
  147.                     let filmRoles = roles.reduce((acc, cur) => {
  148.                         let curFilmRole = {
  149.                             role: cur,
  150.                             actor: false
  151.                         };
  152.                         acc.push(curFilmRole);
  153.                         return acc;
  154.                     }, []);
  155.  
  156.                     let film = {
  157.                         filmName,
  158.                         filmRoles
  159.                     };
  160.  
  161.                     if (findedFilms.length > 0) {
  162.                         film.filmName += ` ${++findedFilms.length}`;
  163.                     }
  164.  
  165.                     this.films.push(film);
  166.                     return film;
  167.                 } else {
  168.                     throw ('Invalid arguments')
  169.                 }
  170.  
  171.             } else {
  172.                 throw ('Invalid arguments count')
  173.             }
  174.         }
  175.  
  176.         lookForProducer(film) {
  177.  
  178.             let f = this.films.filter((f) => f.filmName === film)[0];
  179.             let output;
  180.  
  181.             if (f) {
  182.                 output = `Film name: ${f.filmName}\n`;
  183.                 output += 'Cast:\n';
  184.                 Object.keys(f.filmRoles).forEach((role) => {
  185.                     output += `${f.filmRoles[role].actor} as ${f.filmRoles[role].role}\n`;
  186.                 });
  187.             } else {
  188.                 throw new Error(`${film} do not exist yet, but we need the money...`)
  189.             }
  190.  
  191.             return output;
  192.         }
  193.     }
  194. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement