Web interface

User stories

As a stakeholder, at any time, through web, I need to see current state of requirements, because I need understand that requirements set are full and correct.

As a stakeholder, at any time, through web, I need to be able to add a comment to any requirements.

As a project team member (PM, analyst, developer, tester), I need to see current state of requirements, because I need to know project requirements.

As a project team member (PM, analyst, developer, tester), at any time, through web, I need to be able add a comment to any requirements, because it is part my usual job on project.

As a PM/analyst, at any time, through CLI, I need to be able to give user access to browsing and commenting requirements, because all team members and stakeholders must have access to requirements.

As an analyst, at any time, through CLI, I need to be able to get all users comments related to particular git repository tag, because I need to consider project team members comments.

Functional requirements

[core] Core

[core.user] User

The System shall provide entity User. This entity shall be using in authentication process.

[core.user.data] User data

The System shall provide the next data for the User entity.

Name | Type | M | Description :——- | —— | - | :———————— login | String | Y | Unique user identifier password | MD5 | Y | MD5 hash of user password

[core.user.repo] Users repository

The System shall provide User Repository.

[core.user.repo.add] Add user to repository

The System shall provide function add user to add an user to Users Repository.

[core.user.repo.add.para] Add user parameters

Function add user shall provide the next set of parameters:

Name | Type | M | Description :——- | —— | - | :——————— login | String | Y | Unique user identifier password | String | Y | User password

[core.user.repo.add.exist] User exist

When add user function called, if user with the same login exists, the System shall replace password for existed login.

[core.com] Comment

The System shall provide entity Comment

[core.com.data] Comment data

The System shall provide the next data for the Comment entity.

Name | Type | M | Description :———- | ——— | - | :———————————- requirement | String | Y | Requirement reference tag | String | Y | Git repository tag (git describe) created_by | String | Y | User login created_at | Timestamp | Y | Timestamp when comment was crated

[core.com.repo] Comments repository

The System shall persist Comment entities through Comments repository. The System shall support the next Comments repository functions. * load collection of comments. * load comment; * save comment; * remove comment.

[core.cmd] Commands

[sec] Security

Simple HTTP Authentication

Web application shall use Simple HTTP Authentication for users.

Storing passwords in MD5

The System shall store users passwords in MD5

[intf] Interface

[cli] CLI

The System shall provide CLI interface

[cli.adduser] adduser

The System shall provide CLI command adduser. This command shall provide interface to [core.user.repo.add] requirement.

[cli.startsever] startsever

The System shall provide CLI command startserver. When command startserver received, the System shall start web application.

<TBD> * IP; * port; * repository - path to corm git repository * tag - tag of corm git repository

[cli.comments] comments command

The System shall provide CLI command comments repository [tag] [ident].

Parameter repository is a path to corm git repository

When parameter tag provided, the System shall output all comments related to provided parameter tag.

When parameter ident provided, the System shall output comments that related to provided parameter ident only.

[web]

The System shall provide Web interface for requirements reviewing and commenting.

[web.auth] Authentication

When an user open application url, the System shall ask authentication information login and password through Simple HTTP Auth.

When user provides wrong (unknown) authentication information, the System shall block access to application.

[web.page] Single page web application

Web application shall be developed as Single page web application

[web.page.parts] Parts

Web application shall provide four main application parts: * Header pane; * Contents navigator pane; * Content pane; * Comment pane;

[web.page.header] Header

The header of web application shall provide the next static information: * Connected user; * Git repository tag;

[web.page.navigator] Contents navigator pane

The Contents navigator pane of web application shall provide dynamic tree of Requirement repository. It shall display requirement ident and requirement title.

The Contents navigator pane must have ability to expand and collapse. By default: * the tree must be fully expanded; * the tree must be positioned on first requirement.

[web.page.content] Content pane

The Content pane of web application shall display requirement body for requirement selected by Content navigator pane.

The Content pane shall display selected requirement and all its child requirements hierarchy with headers.

TBD inner requirements links

[web.page.comment] Comments pane

The Content pane of web application shall display new comment form and history of comments.

[web.page.comment.create] New comment form

The New comment form shall provide form with: * text of comment; * button submit.

When button submit pressed, the app shall save comment in persistent store. The app shall save tag, user, creation time and comment body.

When button submit pressed, if comment stored successfully, the app shall add saved comment to comment history pane as first comment. See more in next section.

[web.page.comment.history] Comments history

The History pane shall display history list of comments. The list shall be sorted as new items in top (новые сверху).

The History list shall display comments history only for selected requirement through Content navigator pane.

Each list item shall display the next information: * user (created_by), * time (created_at in 1 hours ago manner), * comment body * and delete button.

When comment was created by another author (is not a current session user), the button delete shall be locked.

[web.page.comment.history.onlymine] All/Only mine

The History pane shall provide checkbox Show All/Only mine.

By default checkbox shall have state Show All

When checkbox Show All/Only mine in state Show All, the app shall display all comment.

When checkbox Show All/Only mine in state Only mine, the app shall display comment created by current user only.

[web.page.comment.history.alltags] All/Only tag

The History pane shall provide checkbox Show All/Only tag. By default checkbox shall have state Show Only tag.

When checkbox Show All/Only tag in state Only tag, the app shall display comments related to current tag (was specified at application start)

When checkbox Show All/Only tag in state Show All, the app shall display comments related to all tags.

Design constraints

Dependencies

The System depends on corm ruby gem and uses Requirement Repository from it.

gem packing

The System shall be packed in Ruby gem.