• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

scoringengine / scoringengine / 23385248069

21 Mar 2026 05:50PM UTC coverage: 73.202% (-2.5%) from 75.69%
23385248069

push

github

RustyBower
Fix test to match DB fallback behavior for missing output files

The endpoint now returns check.output from DB (200) instead of 404
when the on-disk file doesn't exist.

3726 of 5090 relevant lines covered (73.2%)

0.73 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.3
/scoring_engine/models/user.py
1
import bcrypt
1✔
2
from flask_login import UserMixin
1✔
3
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, Text
1✔
4
from sqlalchemy.orm import relationship
1✔
5

6
from scoring_engine.models.base import Base
1✔
7

8

9
class User(Base, UserMixin):
1✔
10
    __tablename__ = "users"
1✔
11
    id = Column(Integer, primary_key=True)
1✔
12
    username = Column(String(50), nullable=False, unique=True)
1✔
13
    password = Column(Text, nullable=False)
1✔
14
    authenticated = Column(Boolean, default=False)
1✔
15
    team_id = Column(Integer, ForeignKey("teams.id"))
1✔
16
    team = relationship("Team", back_populates="users")
1✔
17

18
    def __init__(self, username, password, team=None):
1✔
19
        self.username = username
1✔
20
        self.update_password(password)
1✔
21
        self.team = team
1✔
22

23
    @property
1✔
24
    def is_red_team(self):
1✔
25
        return self.team.is_red_team
1✔
26

27
    @property
1✔
28
    def is_white_team(self):
1✔
29
        return self.team.is_white_team
1✔
30

31
    @property
1✔
32
    def is_blue_team(self):
1✔
33
        return self.team.is_blue_team
1✔
34

35
    @property
1✔
36
    def is_authenticated(self):
1✔
37
        return self.authenticated
1✔
38

39
    @property
1✔
40
    def is_active(self):
1✔
41
        return True
1✔
42

43
    @property
1✔
44
    def is_anonymous(self):
1✔
45
        return False
1✔
46

47
    @property
1✔
48
    def get_username(self):
1✔
49
        return self.username
1✔
50

51
    def check_password(self, password):
1✔
52
        password = password.encode("utf-8")[:72]
1✔
53
        return bcrypt.checkpw(password, self.password.encode("utf-8"))
1✔
54

55
    def update_password(self, password):
1✔
56
        self.password = User.generate_hash(password)
1✔
57
        return True
1✔
58

59
    @staticmethod
1✔
60
    def generate_hash(password, salt=None):
1✔
61
        if salt is None:
1✔
62
            salt = bcrypt.gensalt()
1✔
63
        elif isinstance(salt, str):
×
64
            salt = salt.encode("utf-8")
×
65

66
        password = password.encode("utf-8")[:72]
1✔
67
        return bcrypt.hashpw(password, salt).decode("utf-8")
1✔
68

69
    def get_id(self):
1✔
70
        return self.id
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc