use super::{BonusTrack, PushContext, Reward, Tier};
pub struct CommitValue;
static TIERS: &[Tier] = &[
Tier {
cost: 0,
reward: Reward::FlatPoints(1),
},
Tier {
cost: 25,
reward: Reward::FlatPoints(2),
},
Tier {
cost: 200,
reward: Reward::FlatPoints(3),
},
Tier {
cost: 2_000,
reward: Reward::FlatPoints(4),
},
Tier {
cost: 20_000,
reward: Reward::FlatPoints(5),
},
];
impl BonusTrack for CommitValue {
fn id(&self) -> &'static str {
"commit_value"
}
fn name(&self) -> &'static str {
"Commit Value"
}
fn description(&self) -> &'static str {
"How many party points you earn per commit."
}
fn tiers(&self) -> &'static [Tier] {
TIERS
}
fn applies(&self, _ctx: &PushContext) -> u32 {
1 }
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{
bonus_track::Clock,
git::Push,
storage::{DbConnection, PushHistory},
};
#[test]
fn tiers_start_free() {
let tiers = CommitValue.tiers();
assert_eq!(tiers[0].cost, 0);
assert_eq!(tiers[0].reward, Reward::FlatPoints(1));
}
#[test]
fn always_applies() {
let conn = DbConnection::create_in_memory().unwrap();
let push = Push::new(vec![]);
let ctx = PushContext {
push: &push,
history: &PushHistory::new(&conn),
clock: &Clock::default(),
};
assert_eq!(CommitValue.applies(&ctx), 1);
}
}