Пример #1
0
    def test_delete_movie_executive_producer_success(self):
        total_movies_before = len(Movie.query.all())

        movie = Movie()
        movie.title = 'Action Filled Movie'
        movie.genre = 'Action'
        movie.insert()

        total_movies_after = len(Movie.query.all())
        self.assertEqual(total_movies_after, total_movies_before + 1)

        res = self.client().delete('/movies/' + str(movie.id),
                                   headers={
                                       "Authorization":
                                       "Bearer {}".format(
                                           self.executive_producer)
                                   })
        data = json.loads(res.data)

        total_movies_after = len(Movie.query.all())

        self.assertEqual(data['success'], True)
        self.assertEqual(data['delete'], movie.id)
        self.assertEqual(res.status_code, 200)
        self.assertEqual(total_movies_after, total_movies_before)
Пример #2
0
    def create_movies(payload):
        """
        Creates a new movie
        """

        request_data = request.get_json()

        title = request_data.get('title')
        description = request_data.get('description')
        category = request_data.get('category')

        if title is None:
            abort(422)

        new_movie = Movie(title=title,
                          description=description,
                          category=category)

        Movie.insert(new_movie)

        return jsonify({
            'success': True,
            'message': 'the movie ' + title + ' was successfully listed',
            'movie': new_movie.format()
        }), 201
Пример #3
0
def add_movie(payload):
    body = request.get_json()

    if not body:
        abort(400)

    if not ('title' in body and 'release_date' in body):
        abort(400)

    title = body['title']
    release_date = body['release_date']

    if 'actors' in body:
        actors = body['actors']
        actors_list = []
        for i in range(len(actors)):
            actor = Actor.query.filter(Actor.name == actors[i]).first()
            if not (actor is None):
                actors_list.append(actor)
    try:
        movie = Movie(title=title, release_date=release_date)
        if 'actors' in body:
            movie.actors = actors_list
        movie.insert()
    except Exception:
        print(sys.exc_info())
        abort(422)
    else:
        return jsonify({'success': True, 'movie': title}), 201
Пример #4
0
    def test_patch_movie(self, headers):

        a = Actor(name='Lars Larsson', age=38, gender=Gender('M'))
        a.insert()

        m = Movie(title='Genesis II', date_release='20200320', actors=[a])
        m.insert()

        #
        # change date_release
        #
        res = self.client().patch(f'/movies/{m.id}', headers=headers,
                                                      data=json.dumps({
                                                            'title': 'Genesis II',
                                                            'date_release': '20200328',
                                                            'actors_id': [a.id]
                                                      }),
                                                      content_type='application/json')
        data = json.loads(res.data)
        self.assertEqual(res.status_code, 200)
        self.assertEqual(data['success'], True)
        self.assertEqual(m.id, data['movie_id'])

        # 
        # check date is changed
        #
        m1 = Movie.query.filter(Movie.id == m.id).one_or_none()
        self.assertEqual(m1.date_release, datetime.datetime.strptime('20200328', '%Y%m%d').date())
Пример #5
0
 def test_get_movies(self):
     movie = Movie(title='test movies one', release_data='5/4/2020')
     movie.insert()
     res = self.client().get('/movies', headers=self.casting_assistant)
     data = json.loads(res.data)
     self.assertEqual(res.status_code, 200)
     self.assertEqual(data['success'], True)
Пример #6
0
    def add_new_movie():
        success = True

        title = request.json.get('title', None)
        if title is None:
            abort(400, 'Missing field \'title\'.')

        release_date = request.json.get('release_date', None)
        if release_date is None:
            abort(400, 'Missing field \'release_date\'.')

        existing_movie = Movie.query.filter(Movie.title.ilike(title)).first()
        if existing_movie is not None:
            abort(409, 'The movie already exists.')

        try:
            new_movie = Movie(title=title, release_date=release_date)
            new_movie.insert()
        except Exception as e:
            db.session.rollback()
            success = False
        finally:
            db.session.close()

        if success:
            return jsonify({'success': True}), 201
        else:
            abort(500, 'Adding the movie to the database was unsuccessful.')
Пример #7
0
    def add_movie(token):
        try:
            # Get the movies data
            data = request.get_json()

            # Abort 404 if there is no movie data
            if data is None:
                abort(404)
            # Assign individual data from json data into variables
            new_title = data.get('title')
            new_release_date = data.get('release_date')
            new_image_link = data.get('image_link')

            # Validate to ensure no data is empty
            if (len(new_title) == 0 or new_release_date == 0):
                abort(400)
            # Create a new movie instance
            new_movie = Movie(title=new_title,
                              release_date=new_release_date,
                              image_link=new_image_link)
            # Insert the movie to the database
            new_movie.insert()
            # Get all the new movies
            new_movie = Movie.query.order_by(Movie.id).all()
            current_movies = [movie.format() for movie in new_movie]

            # Return a success message
            return jsonify({
                'success': True,
                'movies': current_movies,
                'total_movies': len(new_movie)
            }), 200

        except BaseException:
            abort(400)
Пример #8
0
    def add_movie(jwt):

        if not request.method == 'POST':
            abort(405)

        try:
            body = request.get_json()
            data = {
                'title': body['title'],
                'release_date': body['release_date']
            }

        except:
            abort(422)

        try:
            movie = Movie(**data)
            movie.insert()
            return jsonify(data)

        except:
            db.session.rollback()
            abort(422)

        finally:
            db.session.close()
Пример #9
0
    def create_movies(jwt):
        '''
        Creates a movie in the database.
        Requieres [create:movies] permission.
        '''
        body = request.get_json()
        title = body.get('title', None)
        released = body.get('released', None)
        picture_link = body.get('picture_link', None)
        synopsis = body.get('synopsis', None)

        if title is None:
            abort(400)
        elif released is None:
            abort(400)
        elif synopsis is None:
            abort(400)

        try:
            movie = Movie(title=title,
                          released=released,
                          picture_link=picture_link,
                          synopsis=synopsis)

            movie.insert()

            return jsonify({'success': True, 'created': movie.id})
        except Exception as e:
            print(e)
            abort(422)
Пример #10
0
 def post_movies(jwt):
     '''
     This endpoint is to post a new movie
     Parameters:
     jwt: Decoded jwt token which contains the permissions of the user
     Responses:
     200:    New movie is created and returns an array of movies
             paginated to 10 movies per page
     422:    Unprocessable request or invalid data in token
     Permissions:
     This endpoint is accessable only to Executive Producers
     '''
     try:
         data = request.get_json()
         if 'title' not in data or 'release_date' not in data:
             abort(422)
         new_title = data['title']
         new_release_date = data['release_date']
         movie = Movie(title=new_title, release_date=new_release_date)
         movie.insert()
         movies = Movie.query.all()
         current_movies = paginate_result(request, movies)
         if len(movies) > 0 and len(current_movies) == 0:
             abort(404)
         return jsonify({
             'success': True,
             'created_movie_id': movie.id,
             'movies': current_movies,
             'total_movies': len(movies)
             })
     except Exception as e:
         print(e)
         abort(422)
Пример #11
0
    def setUp(self):
        '''Executes before each test. Set variables and init app.'''
        self.app = create_app()
        self.client = self.app.test_client
        self.database_url = os.environ['DATABASE_URL']
        setup_db(self.app, self.database_url)

        with self.app.app_context():
            self.db = SQLAlchemy()
            self.db.init_app(self.app)
            self.db.create_all()

        new_actor = Actor(name='Test_Name', age=31, gender='f')
        new_actor.insert()
        new_actor = Actor.query.filter(
            Actor.name.ilike('%Test_Name%')).one_or_none()
        global actor_id
        actor_id = new_actor.id

        new_movie = Movie(title='Test_Title', release_date='2012-02-14')
        new_movie.insert()
        new_movie = Movie.query.filter(
            Movie.title.ilike('%Test_Title%')).one_or_none()
        global movie_id
        movie_id = new_movie.id
Пример #12
0
    def post_movie(jwt):
        if not request.json:
            abort(400)
        try:
            new_movie = Movie()
            if "title" in request.json:
                title = request.json["title"]
                new_movie.title = title
            if "release_date" in request.json:
                date_arr = [
                    int(val) for val in request.json["release_date"].split("-")
                ]
                release_date = datetime.datetime(*date_arr)
                new_movie.release_date = release_date

            new_movie.insert()

            return (jsonify({
                "success": True,
                "movie": new_movie.format()
            }), 200)

        except:
            print(sys.exc_info())
            abort(422)
Пример #13
0
    def create_movie(jwt):
        data = request.get_json()
        new_title = data.get('title', None)
        new_genres = data.get('genres', None)
        new_weblink = data.get('website_link', None)
        new_fblink = data.get('facebook_link', None)
        new_reldate = data.get('release_date', None)
        new_desc = data.get('mv_desc', None)
        new_imglink = data.get('image_link', None)
        new_seekact = data.get('seeking_actors', None)
        new_seekdesc = data.get('seeking_description', None)

        if new_title is None or new_genres is None or new_reldate is None:
            abort(400)
        else:
            try:
                q = Movie(title=new_title,
                          genres=new_genres,
                          mv_desc=new_desc,
                          seeking_actors=new_seekact,
                          seeking_description=new_seekdesc,
                          image_link=new_imglink,
                          website_link=new_weblink,
                          facebook_link=new_fblink,
                          release_date=new_reldate)
                q.insert()
                return jsonify({"success": True, "created": q.id})
            except Exception as e:
                print(str(e))
                abort(422)
Пример #14
0
    def add_movie(token):
        body = request.get_json()
        '''
            Check if all information are included in the request
        '''

        if is_none(body.get('title'), body.get('release_date')):
            abort(401)  # bad request
        try:
            '''
                Create new Movie
            '''
            new_movie = Movie(title=body['title'],
                              release_date=body['release_date'])

            new_movie.insert()

            return jsonify({
                'success': True,
                'movie': new_movie.format(),
                "movie's_actors": new_movie.get_actors()
            })

        except Exception:
            abort(422)  # unprocessable
Пример #15
0
    def post_movie():
        """POST "/movies" endpoint.

        Add a new movie. Receives a json object with the members: title, release_date.

        :returns: A JSON object with the member `id`: the id of the newly created movie.
        :raises HTTPException: An appropriate HTTP exception.
        """
        data = request.get_json()
        if not data:
            abort(400)
        title = data.get('title', None)
        release_date = data.get('release_date', None)
        # Raise bad request error if title or release_date data is not sent
        if title is None or release_date is None:
            abort(400)
        # Raise unprocessable error if any error occurs during adding the new movie to the database
        try:
            # Convert date in "yyyy-mm-dd" format to a date object
            release_date = dt.date.fromisoformat(release_date)
            new_movie = Movie(title, release_date)
            new_movie.insert()
            return jsonify({
                'id': new_movie.id
            })
        except Exception as e:
            print(e)
            abort(422)
Пример #16
0
    def create_movie(token):
        # getting the json body and splitting the elemtents
        body = request.get_json()

        new_title = body.get('title')
        new_release_date = body.get('release_date')

        # if the required data is not in the body then its abort due to bad
        # request
        if not ('title' in body and 'release_date' in body):
            abort(400)

        # create the new movie assigning new data to columns
        movie = Movie(title=new_title, release_date=new_release_date)
        movie.insert()

        movies = Movie.query.order_by(Movie.id).all()
        current_movies = pagination(request, movies, 'movies')

        return jsonify({
            'success': True,
            'created': movie.id,
            'movies': current_movies,
            'total_movies': len(movies)
        }), 200
Пример #17
0
    def create_movie(payload):
        """Inserts a new row in the Movie table.

        Requires the 'post:movies' permission in the JWT Bearer authentication.
        JSON request body must be valid against the post_movie.json schema.

        Args:
            payload: A validated JWT for the Casting Agency app.

        Returns:
            A JSON response indicating success and the ID of the created Movie.
        """
        request_body = request.get_json()
        title = request_body['title']
        release_date = request_body['releaseDate']

        new_movie = Movie(
            title=title,
            release_date=release_date
        )
        new_movie.insert()

        return jsonify({
            'success': True,
            'created': new_movie.id
        }), 201
Пример #18
0
    def post_movie(jwt):
        try:
            body = request.get_json()
            new_movie_title = body.get("title", None)
            new_movie_release_date = body.get("release_date", None)
            new_movie_cast_filled = body.get("cast_filled", None)

            movie_new = Movie(
                title=new_movie_title,
                release_date=new_movie_release_date,
                cast_filled=new_movie_cast_filled,
            )

            movie_new.insert()

            movie = (Movie.query.filter(
                Movie.title == new_movie_title).one_or_none().format())
            response = {
                "success": True,
                "id": movie["id"],
                "title": movie["title"],
                "release_date": movie["release_date"],
                "cast_filled": movie["cast_filled"],
            }
            return (jsonify(response), 201)
        except:
            abort(422)
Пример #19
0
    def add_new_movie(jwt):
        '''
    Inserts new movie instance based on fields given in the request. 
    If required fields are missing "400: ???" error given. 
    Returns the id of the movie sucessfully inserted. 
    '''
        new_title = request.json.get('title', None)
        new_release_date = request.json.get('release_date', None)

        if (new_title is None) or (new_release_date is None):
            abort(400)
        else:
            new_movie = Movie(title=new_title, release_date=new_release_date)
            try:
                new_movie.insert()
            except Exception:
                abort(422)

        created_movie = Movie.query.filter(
            Movie.title == new_title,
            Movie.release_date == new_release_date).one_or_none()

        if created_movie is None:
            abort(404)
        else:
            return jsonify({'success': True, 'movie_id': created_movie.id})
Пример #20
0
    def test_update_movie_executive_producer(self):
        movie = Movie.query.filter_by(id=2).first()

        movieUpdate = {
            'title': "movie_updated",
            'movie_genrs': movie.movie_genrs,
            'release_date': movie.release_date
        }

        # movie.update()

        res = self.client().patch('/movies/' + str(movie.id),
                                  json=movieUpdate,
                                  headers=settingup_auth('executive_producer'))
        data = json.loads(res.data)
        self.assertEqual(res.status_code, 200)
        self.assertEqual(data['success'], True)
        self.assertEqual(data['edited'], 2)
        # self.assertEqual(data['movie']['title'], 'updated_movie')

        # def test_401_update_movie_casting_assistant(self):
        movie = Movie(title='first Name')
        movie.insert()
        res = self.client().patch('/movies/' + str(movie.id),
                                  json={'title': 'updated_movie'},
                                  headers=settingup_auth('casting_assistant'))
        self.assertEqual(res.status_code, 401)
Пример #21
0
 def test_get_movies_200(self):
     movie = Movie(title='Hello', release_date='2012-01-15')
     movie.insert()
     response = self.client().get('/movies', headers=self.assistant)
     data = json.loads(response.data)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(data['success'], True)
Пример #22
0
    def create_movie(payload):
        body = request.get_json()

        new_movie = body.get('movie', None)
        genres = body.get('genres', None)
        age_rating = body.get('age_rating', None)

        try:
            movie = Movie(movie=new_movie,
                          genres=genres,
                          age_rating=age_rating)
            movie.insert()

            movies = Movie.query.all()
            formated_movies = [movie.format for movie in movies]

            return jsonify({
                'success': True,
                'created': movie.id,
                'total_movies': len(movies)
            })

        except BaseException as e:
            print(e)
            abort(422)
Пример #23
0
def create_movie():
    """Route handler for the endpoint for creating a new movie.

    Returns:
        response: A json object representing info about the created movie
    """
    try:

        movie = Movie(
            title=request.json.get("title"),
            release_date=request.json.get("release_date"),
            poster=request.json.get("poster"),
            actors=get_actors_from_names(request.json.get("actors")),
        )

        movie.insert()

        response = jsonify({
            "success": True,
            "created_movie_id": movie.id,
            "old_movie": None,
            "new_movie": movie.format(),
        })

    except AttributeError:
        abort(400)

    return response
Пример #24
0
    def create_movie(jwt):
        error = False
        data = request.data
        data_dictionary = json.loads(data)
        release_date = data_dictionary['release_date']
        regex_release_date = '^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$'
        match = re.search(regex_release_date, release_date)
        if not match:
            return jsonify({
                'succes':
                False,
                'error':
                422,
                'message':
                'Please insert a valid date in this format dd/mm/yyy'
            }), 422
        try:
            title = data_dictionary['title']
            movie = Movie(title=title, release_date=release_date)
            movie.insert()
        except:
            error = True
            Movie.rollback()
            print(sys.exc_info())

        if error:
            abort(422)
        else:
            return jsonify({'success': True, 'movie': movie.format()})
Пример #25
0
 def tearDown(self):
     """Executed after reach test"""
     db_drop_and_create_all()
     actor = Actor(**self.new_actor)
     actor.insert()
     movie = Movie(**self.new_movie)
     movie.insert()
    def test_patch_role_to_provide_actor_id(self):
        new_movie = Movie(**AppTestCase.test_movie)
        new_movie.insert()
        movie_id = new_movie.id

        new_role = Role(movie_id=movie_id, **AppTestCase.test_role)
        new_role.insert()
        role_id = new_role.id

        new_actor = Actor(**AppTestCase.test_actor)
        new_actor.insert()
        actor_id = new_actor.id

        res = self.client().patch(f'/roles/{role_id}',
                                  json={'actor_id': actor_id},
                                  headers=HEADER)
        data = json.loads(res.data)

        self.assertEqual(res.status_code, 200)
        self.assertTrue(data['success'])
        self.assertEqual(data['id'], role_id)
        role = Role.query.get(role_id)
        self.assertEqual(role.actor_id, actor_id)

        new_movie.delete()
        new_actor.delete()
Пример #27
0
	def create_movie_submit():
		error = False
		form = MovieForm()
		if form.validate_on_submit():
			try:
				movie = Movie(
					title=form.title.data,
					release=form.release.data,
					image_link=form.image_link.data,
					# website=form.website.data,
					# facebook_link=form.facebook_link.data,
				)
				movie.insert()
			except:
				error = True
				print(sys.exc_info())
				movie.rollback()
			finally:
				movie.close()
				if error:
					flash(
						'An error occurred. Movie '
						+ request.form['title']
						+ ' could not be listed.'
					)
				else:
					flash('Movie ' + request.form['title'] + ' was successfully listed!')
		else:
			flash('One or more fields are not valid.')
			# flash(actor.facebook_link.data + ': ' + str(actor.errors['facebook_link']))
			return render_template('forms/new_movie.html', form=form)

		return redirect(url_for('movies'))
    def test_patch_role_by_invalid_age_interval(self):
        new_movie = Movie(**AppTestCase.test_movie)
        new_movie.insert()
        movie_id = new_movie.id

        new_role = Role(movie_id=movie_id, **AppTestCase.test_role)
        new_role.insert()
        role_id = new_role.id

        change_data = {
            'min_age': 25,
            'max_age': 20,
        }

        res = self.client().patch(f'/roles/{role_id}',
                                  json=change_data,
                                  headers=HEADER)
        data = json.loads(res.data)

        self.assertEqual(res.status_code, 422)
        self.assertFalse(data['success'])
        err_message = 'Min age can not be greater than max age'
        self.assertEqual(data['message'], err_message)

        new_movie.delete()
Пример #29
0
    def post_new_movie(self):

        body = request.get_json()

        if ((body.get('title') is None) or (body.get('release_date') is None)):
            abort(422)

        else:
            new_title = body.get('title')
            new_release_date = body.get('release_date')

            try:
                movie = Movie(title=new_title, release_date=new_release_date)

                movie.insert()

                new_movie = Movie.query.get(movie.id)

                return jsonify({
                    'success': True,
                    'created': movie.id,
                    'new_movie': new_movie.format()
                })

            except Exception:
                abort(422)
Пример #30
0
    def post_to_movies(payload):
        body = request.get_json()
        print(body)

        new_title = body.get('title', None)
        new_release_date = body.get('release_date', None)

        try:
            movie = Movie(
                title=new_title,
                release_date=new_release_date,
            )
            movie.insert()

            movie_list = format_list(Movie.query.all())

            return jsonify({
                'success': True,
                'created_id': movie.id,
                'movie_list': movie_list,
                'number_of_movies': len(movie_list)
            })

        except BaseException:
            abort(422)