I would patch this setup by adding a macro \Glsheading
that retrieves a capitalized version of the long acronym description. So, you could say something like
\section{\Glsheading{test}}
In the glossaries
package those things are accomplished with token registers. For your purpose it will be sufficent to store the relevant information into a macro. Hence a definition of \Glsheading
could look like
\newcommand{\Glsheading}[1]{\@nameuse{gls@cap@head@#1}}
Now, you need to include a little module to \newacronym
that stores the control sequence gls@cap@head@#1
, or in your example case \gls@cap@head@test
(=> "This Text Should Be Capitalized In Headings (TTSbCiH)"):
\LetLtxMacro{\gls@newacronym}{\newacronym}
\renewcommand{\newacronym}[4][]{%
\gls@newacronym[#1]{#2}{#3}{#4}
\@namedef{gls@cap@head@#2}{\capitalize{#4} (#3)}}
\newcommand{\Glsheading}[1]{\@nameuse{gls@cap@head@#1}}
Note: This definition uses the letltxmacro
package and a helper macro \capitalize
(given in the complete code)

\documentclass{scrartcl}
\usepackage[acronym]{glossaries}
%<begin_patch>
\usepackage{letltxmacro}
\makeatletter
\LetLtxMacro{\gls@newacronym}{\newacronym}
\renewcommand{\newacronym}[4][]{%
\gls@newacronym[#1]{#2}{#3}{#4}
\@namedef{gls@cap@head@#2}{\capitalize{#4} (#3)}}
\newcommand{\Glsheading}[1]{\@nameuse{gls@cap@head@#1}}
\makeatother
\newcommand{\capitalize}[1]{%
\ignorespaces
\expandafter\expandafter\expandafter
\xcapitalize\expandafter\space #1 \relax}
\def\xcapitalize#1 #2{%
#1%
\ifx\relax#2\else
\space\MakeUppercase{#2}%
\expandafter\xcapitalize
\fi}
%<end_patch>
\newacronym{test}{TTSbCiH}{this text should be capitalized in headings}
\makeglossaries
\begin{document}
\section{\Glsheading{test}}
\Glsfirst{test}\\
\glsfirst{test}
\printglossaries
\end{document}