-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' into document/#185-Burndown_riscos
- Loading branch information
Showing
17 changed files
with
237 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
from flask_restful import Resource | ||
from flask import request, make_response, jsonify | ||
from ..schemas import report_schema | ||
from ..services import report_services | ||
from marshmallow import ValidationError | ||
from flask_jwt_extended import jwt_required, current_user | ||
|
||
class ReportList(Resource): | ||
@jwt_required() | ||
def post(self): | ||
try: | ||
user = current_user | ||
rs = report_schema.ReportSchema() | ||
report = rs.load(request.json) | ||
message, status_code = report_services.register_report(report, user) | ||
return make_response(jsonify(message), status_code) | ||
except ValidationError as err: | ||
return make_response(jsonify(err.messages), 400) | ||
|
||
def configure(api): | ||
api.add_resource(ReportList, "/report") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,18 @@ | ||
from app.ext.database import db | ||
import enum | ||
|
||
|
||
class ReportTypes(enum.Enum): | ||
linguagem_ofensiva = 'L' | ||
incoerencia = 'I' | ||
grave = 'G' | ||
outros = 'O' | ||
|
||
|
||
class Report(db.Model): | ||
__tablename__ = "report" | ||
|
||
id_report = db.Column(db.Integer, primary_key=True) | ||
id_post = db.Column(db.Integer, db.ForeignKey("post.id_post"), nullable=False) | ||
id_post = db.Column(db.Integer, db.ForeignKey( | ||
"post.id_post"), nullable=False) | ||
content = db.Column(db.String(120), nullable=False, default='') | ||
reg_student = db.Column(db.Integer, db.ForeignKey("student.reg_student"), nullable=False) | ||
report_type = db.Column(db.Enum(ReportTypes), nullable=False) | ||
reg_student = db.Column(db.Integer, db.ForeignKey( | ||
"student.reg_student")) | ||
id_professor = db.Column(db.Integer, db.ForeignKey( | ||
"professor.id_professor")) | ||
offensive = db.Column(db.Boolean, nullable=False) | ||
prejudice = db.Column(db.Boolean, nullable=False) | ||
unrelated = db.Column(db.Boolean, nullable=False) | ||
others = db.Column(db.Boolean, nullable=False) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
from . import ma | ||
from marshmallow import fields, validate | ||
from ..model import report | ||
|
||
class ReportSchema(ma.SQLAlchemySchema): | ||
class Meta: | ||
model = report.Report | ||
|
||
id_post = fields.Integer(required=True, validate=validate.Range(min=0)) | ||
content = fields.String(required=True, validate=validate.Length(min=10, max=120)) | ||
offensive = fields.Boolean(required=True) | ||
prejudice = fields.Boolean(required=True) | ||
unrelated = fields.Boolean(required=True) | ||
others = fields.Boolean(required=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
from ..model.report import Report | ||
from ..ext.database import db | ||
from . import student_services, post_services | ||
from ..model.post import Post | ||
|
||
|
||
def register_report(report, user): | ||
message, status_code = validate_post(report.get('id_post')) | ||
|
||
if(status_code == 404): | ||
return message, status_code | ||
|
||
report_db = Report(id_post=report.get( | ||
'id_post'), content=report.get('content'), offensive=report.get('offensive'), prejudice=report.get('prejudice'), unrelated=report.get('unrelated'), others=report.get('others')) | ||
if(user.is_professor()): | ||
report_db.id_professor = user.id_professor | ||
else: | ||
report_db.reg_student = user.reg_student | ||
db.session.add(report_db) | ||
db.session.commit() | ||
|
||
return {'message': "Report successfully added"}, 201 | ||
|
||
def validate_post(id_post): | ||
if Post.get(id_post = id_post) is None: | ||
return {'message': "Post not found!"}, 404 | ||
return None, None | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
from flask_base_tests_cases import TestFlaskBase | ||
from flask import url_for, jsonify | ||
from tests_post import register_post, valid_post_id | ||
|
||
def valid_report(self): | ||
self.create_base_entities() | ||
register_post(self) | ||
return{ | ||
"id_post": valid_post_id(self)['id_post'], | ||
"content": "Comentario me ofendeu", | ||
"offensive": True, | ||
"prejudice": False, | ||
"unrelated": False, | ||
"others": False | ||
} | ||
|
||
def register_report(self, report=None, headers=None): | ||
if headers is None: | ||
headers = self.create_student_token() | ||
if report is None: | ||
report = valid_report(self) | ||
|
||
return self.client.post(url_for('restapi.reportlist'), json=report, headers=headers) | ||
|
||
|
||
class TestReportList(TestFlaskBase): | ||
|
||
def test_api_must_register_a_valid_report(self): | ||
report = valid_report(self) | ||
response = register_report(self, report=report) | ||
self.assertEqual(response.status_code, 201) | ||
self.assertEqual(response.json.get('message'), 'Report successfully added') | ||
|
||
def test_api_must_register_report_by_professor(self): | ||
report = valid_report(self) | ||
token = self.create_professor_token() | ||
response = register_report(self, report=report, headers=token) | ||
|
||
self.assertEqual(response.status_code, 201) | ||
self.assertEqual(response.json.get('message'), 'Report successfully added') | ||
|
||
def test_api_must_validate_no_token(self): | ||
report = valid_report(self) | ||
response = register_report(self, report=report, headers={}) | ||
|
||
self.assertEqual(response.status_code, 401) | ||
self.assertEqual(response.json.get('msg'), 'Missing Authorization Header') | ||
|
||
def test_api_must_validate_empty_attributes(self): | ||
report = {} | ||
response = register_report(self, report=report) | ||
|
||
expected_json_keys = ['content', 'id_post', 'offensive', 'others', 'prejudice', 'unrelated'] | ||
json_keys = list(response.json.keys()) | ||
self.assertEqual(response.status_code, 400) | ||
self.assertEqual(json_keys, expected_json_keys) | ||
|
||
def test_api_must_validate_attributes_min(self): | ||
report = valid_report(self) | ||
report['content'] = "" | ||
response = register_report(self, report=report) | ||
self.assertEqual(response.status_code, 400) | ||
self.assertIsNotNone(response.json.get('content')) | ||
|
||
def test_api_must_validate_attributes_max(self): | ||
report = valid_report(self) | ||
report['content'] = "a"*121 | ||
response = register_report(self, report=report) | ||
self.assertEqual(response.status_code, 400) | ||
self.assertIsNotNone(response.json.get('content')) | ||
|
||
def test_api_must_validate_post_relationship_not_found(self): | ||
report = valid_report(self) | ||
report['id_post']+= 1 | ||
response = register_report(self, report=report) | ||
|
||
self.assertEqual(response.status_code, 404) | ||
self.assertEqual(response.json.get('message'), "Post not found!") | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters