added some tests

This commit is contained in:
serafim.urukov 2021-07-27 23:31:03 +03:00
parent 109508992e
commit 278e3b07d2
6 changed files with 91 additions and 12 deletions

5
.gitignore vendored
View File

@ -1,5 +1,6 @@
.vscode
SpreadsheetsService/client_secret.json
SpreadsheetsService/token.json
SpreadsheetsService/models/__pycache__/*
SpreadsheetsService/utils/__pycache__/*
SpreadsheetsService/models/__pycache__
SpreadsheetsService/utils/__pycache__
SpreadsheetsService/tests/__pycache__

View File

@ -1,7 +1,7 @@
class Assignment:
"""Задание."""
def __init__(self, weight: float, values: tuple):
def __init__(self, weight: float, values):
self.weight = weight
self.values = values

View File

@ -14,7 +14,7 @@ class Group:
def __init__(self, group_id: int):
self.group_id: int = group_id
self.students: Student = []
self._students: Student = []
def __iter__(self):
"""Делегирует итератор на список студентов.
@ -24,18 +24,18 @@ class Group:
for student in group
```
"""
return iter(self.students)
return iter(self._students)
def add_student(self, student: Student):
"""Добавить студента в группу."""
self.students.append(student)
self._students.append(student)
def get_student_by_number(self, number: int) -> Student:
"""Возвращает студента по его номеру, если номера нет, то поднимает
ошибку."""
f = lambda s: number == s.number
try:
return next(filter(f, self.students))
return next(filter(f, self._students))
except StopIteration:
raise StudentNotFound("Не могу найти студента по номеру")
@ -50,15 +50,15 @@ class Group:
"""
f = lambda s: name.lower() in s.name.lower()
return list(filter(f, self.students))
return list(filter(f, self._students))
def top(self, n: int = None) -> list:
"""Топ N студентов группы по среднему баллу. Возвращает весь список,
если N не указано."""
n = len(self.students) if n is None else n
return sorted(self.students, key=lambda student: student.grade)[:n]
n = len(self._students) if n is None else n
return sorted(self._students, key=lambda student: student.grade)[:n]
def between(self, a: float, b: float) -> list:
"""Список студентов, у которых оценка между [a, b]."""
f = lambda student: a < student.average < b
return list(filter(f, self.students))
return list(filter(f, self._students))

View File

@ -10,7 +10,6 @@ class Student:
self.tg_id = None
self.assignments = []
@property
def add_assignment(self, assignment: Assignment):
self.assignments.append(assignment)

View File

View File

@ -0,0 +1,79 @@
import pytest
from models import *
ASSIGNMENTS = ((1, [1, 1, 1]), (10, [0.1, 0.8, 0.5]), (2, [1, 0, 1, 0]))
STUDENTS = (
(1, "Бмэ Бобтубтйа"),
(2, "Боупопгб Нймбоб"),
(3, "Вспогбмэе Мёпойе"),
(4, "Дсйщйо Туёрбо"),
(5, "Еиёко Ейбоб"),
(6, "Еиявб Бооб"),
(7, "Ёмпглп Ебсэа"),
(8, "Лмёёг Ебойм"),
(9, "Лпсоёёг Лйсймм"),
(10, "Лпсойёолп Ойлйуб"),
(11, "Лпшлйо Йгбо"),
(12, "Лфсвбо Йгбо"),
(13, "Нбмэлпг Боесёк"),
(14, "Нботфспг Гмбейнйс"),
(15, "Нпйтёёг Лйсймм"),
(16, "Обибспг Уйнпхёк"),
(17, "Одфбезйп Одфёттпод Туйг Сб"),
(18, "Псёцпг Гмбейтмбг"),
(19, "Тёсёвсёоойлпгб Бобтубтйа"),
(20, "Тусфшйо Бобупмйк"),
(21, "Ублбмпгб Лбнйммб"),
(22, "Убсбтёгйш Пмэдб"),
(23, "Уплбсёг Тёсдёк"),
(24, "Успхйнпгб Бобтубтйа"),
(25, "Шфвбс Ебойм"),
(26, "Щбупг Нйцбйм"),
)
class TestStudent:
def test_init(self):
student = Student(1, "Фарид Михайлов")
assert student.name == "Фарид Михайлов"
assert student.number == 1
def test_student_assignments(self):
student = Student(1, "Фарид Михайлов")
ass = [Assignment(weight, values) for weight, values in ASSIGNMENTS]
for a in ass:
student.add_assignment(a)
assert student.score > 0
class TestGroup:
@staticmethod
def init_group():
group = Group(5374)
for el in STUDENTS:
student = Student(el[0], el[1])
group.add_student(student)
return group
def test_init(self):
group = self.init_group()
for student in group:
assert type(student) is Student
def test_search(self):
group = self.init_group()
ebob = group.get_student_by_number(5)
assert ebob.name == "Еиёко Ейбоб"
students = group.find_students("Йгбо")
assert len(students) == 2
def test_top(self):
group = self.init_group()
group.top(5)