feat(vida): horário de dormir acompanha a rotina da casa e lição honesta
- A lição da rotina separa o que cai na madrugada: "das 10h às 23h vou
estar acordado; das 23h à 1h é a minha hora de dormir, fico quietinho
a não ser que alguém me chame" (antes prometia ficar acordado de
madrugada, o que nunca acontecia).
- Com 5+ dias de rotina, na virada do dia ele mexe sozinho no horário
da madrugada: atrasa o início se a primeira hora costuma ter gente,
adianta o fim se a casa acorda cedo; 1 h por noite, no máximo 3 h
depois / 2 h antes do que a pessoa escolheu, nunca menos de 5 h de
madrugada, e volta quando as horas esvaziam. Mudança à mão vira a
nova base. Fica no diário e no "Dia a dia"; liga/desliga no cartão.
- Faixas que passam da meia-noite viram uma só ("das 23h à 1h").
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -136,6 +136,78 @@ class AprendizadoTest(unittest.TestCase):
|
||||
self.assertEqual(outro.peso('rir'), 1.0)
|
||||
self.assertEqual(Aprendizado(self.caminho).itens, {})
|
||||
|
||||
def ligar_noite(self, ini=23, fim=7):
|
||||
estado = {'noite': (ini, fim)}
|
||||
self.a.noite = lambda: estado['noite']
|
||||
self.a.mudar_noite = lambda i, f: estado.update(noite=(i, f))
|
||||
return estado
|
||||
|
||||
def test_rotina_separa_o_que_cai_na_madrugada(self):
|
||||
self.ligar_noite(23, 7)
|
||||
self.a.dias = 3
|
||||
for h in list(range(10, 24)) + [0, 2]:
|
||||
self.a.rotina[h] = 0.8
|
||||
self.a.config['ajustar_sono'] = False
|
||||
licoes = self.a.fechar_dia()
|
||||
texto = next(t for t in licoes if t.startswith('Percebi'))
|
||||
self.assertIn('das 10h às 23h. Vou estar acordado nessa hora.', texto)
|
||||
self.assertIn('Das 23h à 1h e das 2h às 3h é a minha hora de dormir', texto)
|
||||
# só gente na madrugada: não promete ficar acordado
|
||||
self.a.rotina = [None] * 24
|
||||
self.a.rotina[2], self.a.rotina_avisada = 0.9, []
|
||||
texto = next(t for t in self.a.fechar_dia() if t.startswith('Percebi'))
|
||||
self.assertEqual(texto, 'Percebi gente por perto das 2h às 3h, mas é a minha hora de dormir: '
|
||||
'fico quietinho, a não ser que alguém me chame.')
|
||||
|
||||
def test_horario_de_dormir_acompanha_a_casa_aos_poucos_e_volta(self):
|
||||
estado = self.ligar_noite(23, 7)
|
||||
self.a.dias = 2
|
||||
self.a.rotina[23], self.a.rotina[0], self.a.rotina[1] = 0.8, 0.7, 0.7
|
||||
self.assertEqual(self.a.ajustar_noite('2026-10-06'), []) # poucos dias: ainda não mexe
|
||||
self.a.dias = 6
|
||||
licoes = self.a.ajustar_noite('2026-10-06')
|
||||
self.assertEqual(estado['noite'], (0, 7)) # 1 h por noite
|
||||
self.assertIn('agora eu vou dormir às 0h (antes era 23h)', licoes[0])
|
||||
self.assertEqual(self.a.decisoes[0]['tipo'], 'sono')
|
||||
self.a.ajustar_noite('2026-10-07')
|
||||
self.a.ajustar_noite('2026-10-08')
|
||||
self.assertEqual(estado['noite'], (2, 7)) # 1h tem gente, 2h já não conta
|
||||
self.a.rotina[2] = 0.9
|
||||
self.a.ajustar_noite('2026-10-09')
|
||||
self.assertEqual(estado['noite'], (2, 7)) # no máximo 3 h depois do escolhido
|
||||
# a casa voltou a dormir cedo: volta 1 h por noite até o horário escolhido
|
||||
self.a.rotina[1] = self.a.rotina[0] = self.a.rotina[23] = 0.1
|
||||
self.assertIn('volto a dormir às 1h', self.a.ajustar_noite('2026-10-10')[0])
|
||||
self.a.ajustar_noite('2026-10-11')
|
||||
self.a.ajustar_noite('2026-10-12')
|
||||
self.assertEqual(estado['noite'], (23, 7))
|
||||
self.assertEqual(self.a.ajustar_noite('2026-10-13'), [])
|
||||
|
||||
def test_acordar_mais_cedo_limites_e_horario_escolhido_a_mao(self):
|
||||
estado = self.ligar_noite(23, 7)
|
||||
self.a.dias = 6
|
||||
self.a.rotina[6], self.a.rotina[5] = 0.8, 0.8
|
||||
self.a.ajustar_noite('2026-10-06')
|
||||
self.a.ajustar_noite('2026-10-07')
|
||||
self.a.ajustar_noite('2026-10-08')
|
||||
self.assertEqual(estado['noite'], (23, 5)) # no máximo 2 h antes
|
||||
# a pessoa muda o horário à mão: vira a nova base e ele não desfaz
|
||||
estado['noite'] = (22, 8)
|
||||
self.a.rotina = [None] * 24
|
||||
self.assertEqual(self.a.ajustar_noite('2026-10-09'), [])
|
||||
self.assertEqual(self.a.sono_base, (22, 8))
|
||||
# madrugada nunca fica menor que 5 h
|
||||
estado['noite'] = (2, 7)
|
||||
self.a.rotina[2], self.a.rotina[6] = 0.9, 0.9
|
||||
self.a.ajustar_noite('2026-10-10')
|
||||
self.assertEqual(estado['noite'], (2, 7))
|
||||
# desligado ou sem madrugada: não mexe
|
||||
self.a.config['ajustar_sono'] = False
|
||||
self.assertEqual(self.a.ajustar_noite('2026-10-11'), [])
|
||||
self.a.config['ajustar_sono'] = True
|
||||
self.a.noite = lambda: None
|
||||
self.assertEqual(self.a.ajustar_noite('2026-10-12'), [])
|
||||
|
||||
def test_validar(self):
|
||||
with self.assertRaises(ValueError):
|
||||
self.a.configurar(dict(ligado='sim'))
|
||||
|
||||
Reference in New Issue
Block a user